Bala,
On 15.07.15 11:31, Bala Manoharan wrote:
Hi Ivan,
Comments Inline...
On 15 July 2015 at 02:48, Ivan Khoronzhuk <[email protected]
<mailto:[email protected]>> wrote:
It's simple improvement is intended to open eyes on possible
hidden issues when a packet can be lost (or sent to def CoS)
while matching one of the rules of first PMR match set, but
intendent to second PMR match set. To correctly check, the
new dst CoS should be used, but for simplicity I used only one.
It's not formated patch and is only for demonstration.
Signed-off-by: Ivan Khoronzhuk <[email protected]
<mailto:[email protected]>>
---
.../classification/odp_classification_tests.c | 42
++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git
a/test/validation/classification/odp_classification_tests.c
b/test/validation/classification/odp_classification_tests.c
index 6e8d152..b5daf32 100644
--- a/test/validation/classification/odp_classification_tests.c
+++ b/test/validation/classification/odp_classification_tests.c
@@ -41,7 +41,9 @@
#define TEST_PMR_SET 1
#define CLS_PMR_SET 5
#define CLS_PMR_SET_SADDR "10.0.0.6/32 <http://10.0.0.6/32>"
+#define CLS_PMR_SET_DADDR "10.0.0.7/32 <http://10.0.0.7/32>"
#define CLS_PMR_SET_SPORT 5000
+#define CLS_PMR_SET_SPORT2 5001
/* Config values for CoS L2 Priority */
#define TEST_L2_QOS 1
@@ -723,6 +725,7 @@ void configure_pktio_pmr_match_set_cos(void)
odp_queue_param_t qparam;
char cosname[ODP_COS_NAME_LEN];
char queuename[ODP_QUEUE_NAME_LEN];
+ static odp_pmr_set_t pmr_set2;
uint32_t addr = 0;
uint32_t mask;
@@ -743,6 +746,22 @@ void configure_pktio_pmr_match_set_cos(void)
retval = odp_pmr_match_set_create(num_terms, pmr_terms,
&pmr_set);
CU_ASSERT(retval > 0);
+ parse_ipv4_string(CLS_PMR_SET_DADDR, &addr, &mask);
+ pmr_terms[0].term = ODP_PMR_DIP_ADDR;
+ pmr_terms[0].val = &addr;
+ pmr_terms[0].mask = &mask;
+ pmr_terms[0].val_sz = sizeof(addr);
+
+ val = CLS_PMR_SET_SPORT2;
+ maskport = 0xffff;
+ pmr_terms[1].term = ODP_PMR_UDP_SPORT;
+ pmr_terms[1].val = &val;
+ pmr_terms[1].mask = &maskport;
+ pmr_terms[1].val_sz = sizeof(val);
+
+ retval = odp_pmr_match_set_create(num_terms, pmr_terms,
&pmr_set2);
+ CU_ASSERT(retval > 0);
+
sprintf(cosname, "cos_pmr_set");
cos_list[CLS_PMR_SET] = odp_cos_create(cosname);
CU_ASSERT_FATAL(cos_list[CLS_PMR_SET] != ODP_COS_INVALID)
@@ -764,6 +783,9 @@ void configure_pktio_pmr_match_set_cos(void)
retval = odp_pktio_pmr_match_set_cos(pmr_set, pktio_loop,
cos_list[CLS_PMR_SET]);
CU_ASSERT(retval == 0);
+ retval = odp_pktio_pmr_match_set_cos(pmr_set2, pktio_loop,
+ cos_list[CLS_PMR_SET]);
Since you are using a different pmr_match_set it is better to create
another CoS and then attach it with this rule pmr_set2 rather than
attaching the same CoS (cos_list[CLS_PMR_SET]).
Coz the validation suite constructs a packet with different parameters,
sends them through loop back interface and then verifies the queue in
which the packet is arriving after classification. it is better to have
different CoS for different PMR rules.
I know, that's why I mentioned about it in comment message.
IMO, this can be added as a separate Test Case rather than modifying on
the same Test Case.
It's only a proposition to add.
You can add this as separate test. I just want to show that current test
is not enough to test this primitive.
Even more, I propose to add another one test that will do the same but
with 3 PMRs in each PMRset and all of them on different layers.
For instance, DMAC - IPsrc - UDP.
It can allow to see situations when API doesn't work as expected.
Some platforms, like my, can have different PDSPs for different
layers and match packets only in one direction, that can lead for
interesting hidden things.
Regards,
Bala
+ CU_ASSERT(retval == 0);
}
void test_pktio_pmr_match_set_cos(void)
@@ -781,6 +803,8 @@ void test_pktio_pmr_match_set_cos(void)
ip = (odph_ipv4hdr_t *)odp_packet_l3_ptr(pkt, NULL);
parse_ipv4_string(CLS_PMR_SET_SADDR, &addr, &mask);
ip->src_addr = odp_cpu_to_be_32(addr);
+ parse_ipv4_string(CLS_PMR_SET_DADDR, &addr, &mask);
+ ip->dst_addr = odp_cpu_to_be_32(addr);
ip->chksum = 0;
ip->chksum = odp_cpu_to_be_16(odph_ipv4_csum_update(pkt));
@@ -791,6 +815,24 @@ void test_pktio_pmr_match_set_cos(void)
CU_ASSERT(queue == queue_list[CLS_PMR_SET]);
CU_ASSERT(seq == cls_pkt_get_seq(pkt));
odp_packet_free(pkt);
+
+ pkt = create_packet(false);
+ seq = cls_pkt_get_seq(pkt);
+ ip = (odph_ipv4hdr_t *)odp_packet_l3_ptr(pkt, NULL);
+ parse_ipv4_string(CLS_PMR_SET_SADDR, &addr, &mask);
+ ip->src_addr = odp_cpu_to_be_32(addr);
+ parse_ipv4_string(CLS_PMR_SET_DADDR, &addr, &mask);
+ ip->dst_addr = odp_cpu_to_be_32(addr);
+ ip->chksum = 0;
+ ip->chksum = odp_cpu_to_be_16(odph_ipv4_csum_update(pkt));
+
+ udp = (odph_udphdr_t *)odp_packet_l4_ptr(pkt, NULL);
+ udp->src_port = odp_cpu_to_be_16(CLS_PMR_SET_SPORT2);
+ enqueue_loop_interface(pkt);
+ pkt = receive_packet(&queue, ODP_TIME_SEC);
+ CU_ASSERT(queue == queue_list[CLS_PMR_SET]);
+ CU_ASSERT(seq == cls_pkt_get_seq(pkt));
+ odp_packet_free(pkt);
}
static void classification_test_pmr_terms_avail(void)
--
1.9.1
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp