test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts][PATCH V3 1/4] tests/ice_iavf_fdir: add multicast new test case
@ 2022-09-14  5:38 Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 2/4] test_plans/ice_iavf_fdir: add mulitcast " Weiyuan Li
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Weiyuan Li @ 2022-09-14  5:38 UTC (permalink / raw)
  To: dts; +Cc: Weiyuan Li, Jiale Song, Peng Yuan

Add ipv4/ipv6 multicast new case for dpdk22.07 new feature.

Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>
---
Tested-by: Jiale Song < songx.jiale@intel.com>
Acked-by: Peng Yuan <yuan.peng@intel.com>

v2:
-modify the ice_iavf_fdir scipt tear_down method and destroy
environment first.
V3:
-modify script and test plan disable promisc and trust mode. 
-add multicast detailes description reference.
-modify script and test plan configure multicast address.

 tests/TestSuite_ice_iavf_fdir.py | 286 ++++++++++++++++++++++++++++++-
 1 file changed, 285 insertions(+), 1 deletion(-)

diff --git a/tests/TestSuite_ice_iavf_fdir.py b/tests/TestSuite_ice_iavf_fdir.py
index 1cc71f67..d6ca832a 100644
--- a/tests/TestSuite_ice_iavf_fdir.py
+++ b/tests/TestSuite_ice_iavf_fdir.py
@@ -29,6 +29,20 @@ MAC_IPV4_PAY = {
     ],
 }
 
+MAC_IPV4_PAY_MULTICAST = {
+    "match": [
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=4) / Raw("X" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=4)/UDP(sport=22,dport=23)/Raw("x" * 80)',
+    ],
+    "mismatch": [
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.22",dst="224.0.0.1", proto=255, ttl=2, tos=4) / Raw("X" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.2", proto=255, ttl=2, tos=4) / Raw("X" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=1, ttl=2, tos=4) / Raw("X" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=3, tos=4) / Raw("X" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=9) / Raw("X" * 80)',
+    ],
+}
+
 MAC_IPV4_PAY_protocol = {
     "match": [
         'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=1)/Raw("x" * 80)',
@@ -46,6 +60,23 @@ MAC_IPV4_PAY_protocol = {
     ],
 }
 
+MAC_IPV4_PAY_multicast_protocol = {
+    "match": [
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=1)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.19",dst="224.0.0.1", proto=1)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", ttl=2, tos=4)/UDP(sport=22,dport=23)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=17)/TCP(sport=22,dport=23)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=17, ttl=2, tos=4)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=17)/Raw("x" * 80)',
+    ],
+    "mismatch": [
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.2", proto=1)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=6)/UDP(sport=22,dport=23)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1")/TCP(sport=22,dport=23)/Raw("x" * 80)',
+        'Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", ttl=2, tos=4)/SCTP()/Raw("x" * 80)',
+    ],
+}
+
 MAC_IPV4_UDP = {
     "match": [
         'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /UDP(sport=22,dport=23)/Raw("x" * 80)'
@@ -61,6 +92,20 @@ MAC_IPV4_UDP = {
     ],
 }
 
+MAC_IPV6_PAY_MULTICAST = {
+    "match": [
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)',
+    ],
+    "mismatch": [
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::1", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::1", nh=0, tc=1, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=2, tc=1, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=2, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=5)/("X"*480)',
+    ],
+}
+
 MAC_IPV4_TCP = {
     "match": [
         'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", ttl=2, tos=4) /TCP(sport=22,dport=23)/Raw("x" * 80)'
@@ -121,6 +166,22 @@ MAC_IPV6_PAY_protocol = {
     ],
 }
 
+MAC_IPV6_PAY_multicast_protocol = {
+    "match": [
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=17, tc=1, hlim=2)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=17)/TCP(sport=22,dport=23)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/UDP(sport=22,dport=23)/TCP(sport=22,dport=23)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=6)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+    "mismatch": [
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::3", nh=1)/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/SCTP()/("X"*480)',
+        'Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=1)/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+}
+
 MAC_IPV6_UDP = {
     "match": [
         'Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2",tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)'
@@ -136,6 +197,94 @@ MAC_IPV6_UDP = {
     ],
 }
 
+tv_mac_ipv4_pay_queue_index_multicast = {
+    "name": "test_mac_ipv4_pay_queue_index_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / mark / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "queue": 1, "mark_id": 0},
+}
+
+tv_mac_ipv4_pay_rss_multicast = {
+    "name": "test_mac_ipv4_pay_rss_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / mark / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "queue": [2, 3], "mark_id": 0},
+}
+
+tv_mac_ipv4_pay_passthru_multicast = {
+    "name": "test_mac_ipv4_pay_passthru_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "passthru": 1, "mark_id": 0},
+}
+
+tv_mac_ipv4_pay_drop_multicast = {
+    "name": "test_mac_ipv4_pay_drop_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions drop / mark / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "drop": 1, "mark_id": 0},
+}
+
+tv_mac_ipv4_pay_mark_rss_multicast = {
+    "name": "test_mac_ipv4_pay_mark_rss_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "passthru": 1, "mark_id": 0},
+}
+
+tv_mac_ipv4_pay_mark_multicast = {
+    "name": "test_mac_ipv4_pay_mark_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions mark / end",
+    "scapy_str": MAC_IPV4_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "mark_id": 0},
+}
+
+tv_mac_ipv6_pay_queue_index_multicast = {
+    "name": "test_mac_ipv4_pay_queue_index_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 15 / mark / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "queue": 15, "mark_id": 0},
+}
+
+tv_mac_ipv6_pay_rss_multicast = {
+    "name": "test_mac_ipv6_pay_rss_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions rss queues 8 9 10 11 12 13 14 15 end / mark / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {
+        "port_id": 0,
+        "queue": [8, 9, 10, 11, 12, 13, 14, 15],
+        "mark_id": 0,
+    },
+}
+
+tv_mac_ipv6_pay_passthru_multicast = {
+    "name": "test_mac_ipv6_pay_passthru_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions passthru / mark / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "passthru": 1, "mark_id": 0},
+}
+
+tv_mac_ipv6_pay_drop_multicast = {
+    "name": "test_mac_ipv6_pay_drop_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions drop / mark / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "drop": 1, "mark_id": 0},
+}
+
+tv_mac_ipv6_pay_mark_rss_multicast = {
+    "name": "test_mac_ipv6_pay_mark_rss_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / rss / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "passthru": 1, "mark_id": 0},
+}
+
+tv_mac_ipv6_pay_mark_multicast = {
+    "name": "test_mac_ipv6_pay_mark_multicast",
+    "rule": "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / end",
+    "scapy_str": MAC_IPV6_PAY_MULTICAST,
+    "check_param": {"port_id": 0, "mark_id": 0},
+}
+
 MAC_IPV6_TCP = {
     "match": [
         'Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2",tc=1, hlim=2)/TCP(sport=22,dport=23)/("X"*480)'
@@ -7223,6 +7372,15 @@ vectors_ipv4_pay = [
     tv_mac_ipv4_pay_mark,
 ]
 
+vectors_ipv4_pay_multicast = [
+    tv_mac_ipv4_pay_queue_index_multicast,
+    tv_mac_ipv4_pay_rss_multicast,
+    tv_mac_ipv4_pay_passthru_multicast,
+    tv_mac_ipv4_pay_drop_multicast,
+    tv_mac_ipv4_pay_mark_rss_multicast,
+    tv_mac_ipv4_pay_mark_multicast,
+]
+
 vectors_ipv4_udp = [
     tv_mac_ipv4_udp_drop,
     tv_mac_ipv4_udp_queue_group,
@@ -7232,6 +7390,15 @@ vectors_ipv4_udp = [
     tv_mac_ipv4_udp_mark,
 ]
 
+vectors_ipv6_pay_multicast = [
+    tv_mac_ipv6_pay_queue_index_multicast,
+    tv_mac_ipv6_pay_rss_multicast,
+    tv_mac_ipv6_pay_passthru_multicast,
+    tv_mac_ipv6_pay_drop_multicast,
+    tv_mac_ipv6_pay_mark_rss_multicast,
+    tv_mac_ipv6_pay_mark_multicast,
+]
+
 vectors_ipv4_tcp = [
     tv_mac_ipv4_tcp_drop,
     tv_mac_ipv4_tcp_queue_group,
@@ -8554,6 +8721,16 @@ class TestICEIAVFFdir(TestCase):
         self.pmd_output.execute_cmd(
             "port config 1 rss-hash-key ipv4 1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd"
         )
+        if self.running_case in [
+            "test_mac_ipv4_pay_multicast",
+            "test_mac_ipv4_multicast_protocol",
+            "test_mac_ipv6_pay_multicast",
+            "test_mac_ipv6_multicast_protocol",
+        ]:
+            self.pmd_output.execute_cmd("set promisc all off")
+            self.pmd_output.execute_cmd("set allmulti all on")
+            # add multicast mac address to pmd
+            self.pmd_output.execute_cmd("mcast_addr add 0 11:22:33:44:55:66")
         res = self.pmd_output.wait_link_status_up("all", timeout=15)
         self.verify(res is True, "there have port link is down")
         self.pmd_output.execute_cmd("start")
@@ -8700,6 +8877,9 @@ class TestICEIAVFFdir(TestCase):
     def test_mac_ipv4_pay(self):
         self.rte_flow_process(vectors_ipv4_pay)
 
+    def test_mac_ipv4_pay_multicast(self):
+        self.rte_flow_process(vectors_ipv4_pay_multicast)
+
     def test_mac_ipv4_udp(self):
         self.rte_flow_process(vectors_ipv4_udp)
 
@@ -8712,6 +8892,9 @@ class TestICEIAVFFdir(TestCase):
     def test_mac_ipv6_pay(self):
         self.rte_flow_process(vectors_ipv6_pay)
 
+    def test_mac_ipv6_pay_multicast(self):
+        self.rte_flow_process(vectors_ipv6_pay_multicast)
+
     def test_mac_ipv6_udp(self):
         self.rte_flow_process(vectors_ipv6_udp)
 
@@ -8828,6 +9011,53 @@ class TestICEIAVFFdir(TestCase):
             out4, pkt_num=6, check_param={"port_id": 0, "passthru": 1}, stats=False
         )
 
+    def test_mac_ipv4_multicast_protocol(self):
+        rules = [
+            "flow create 0 ingress pattern eth / ipv4 dst is 224.0.0.1 proto is 1 / end actions queue index 1 / mark id 1 / end",
+            "flow create 0 ingress pattern eth / ipv4 dst is 224.0.0.1 proto is 17 / end actions passthru / mark id 3 / end",
+        ]
+
+        # validate rules
+        self.validate_fdir_rule(rules, check_stats=True)
+        self.check_fdir_rule(port_id=0, stats=False)
+
+        # create rules
+        rule_li = self.create_fdir_rule(rules, check_stats=True)
+        self.check_fdir_rule(port_id=0, rule_list=rule_li)
+
+        # pkt1 and pkt2 in "match" match rule 0, pkt3-6 match rule 1.
+        out1 = self.send_pkts_getouput(MAC_IPV4_PAY_multicast_protocol["match"][0:2])
+        rfc.check_iavf_fdir_mark(
+            out1,
+            pkt_num=2,
+            check_param={"port_id": 0, "mark_id": 1, "queue": 1},
+            stats=True,
+        )
+
+        out2 = self.send_pkts_getouput(MAC_IPV4_PAY_multicast_protocol["match"][2:6])
+        rfc.check_iavf_fdir_mark(
+            out2,
+            pkt_num=4,
+            check_param={"port_id": 0, "mark_id": 3, "passthru": 1},
+            stats=True,
+        )
+
+        # send mismatched packets:
+        out3 = self.send_pkts_getouput(MAC_IPV4_PAY_multicast_protocol["mismatch"])
+        rfc.check_iavf_fdir_mark(
+            out3, pkt_num=4, check_param={"port_id": 0, "passthru": 1}, stats=False
+        )
+
+        # destroy the rules and check there is no rule listed.
+        self.destroy_fdir_rule(rule_id=rule_li, port_id=0)
+        self.check_fdir_rule(port_id=0, stats=False)
+
+        # send matched packet
+        out4 = self.send_pkts_getouput(MAC_IPV4_PAY_multicast_protocol["match"])
+        rfc.check_iavf_fdir_mark(
+            out4, pkt_num=6, check_param={"port_id": 0, "passthru": 1}, stats=False
+        )
+
     def test_mac_ipv6_protocol(self):
         rules = [
             "flow create 0 ingress pattern eth / ipv6 dst is CDCD:910A:2222:5498:8475:1111:3900:2020 proto is 17 / end actions rss queues 5 6 end / mark id 0 / end",
@@ -8875,6 +9105,53 @@ class TestICEIAVFFdir(TestCase):
             out4, pkt_num=6, check_param={"port_id": 0, "passthru": 1}, stats=False
         )
 
+    def test_mac_ipv6_multicast_protocol(self):
+        rules = [
+            "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 proto is 17 / end actions rss queues 5 6 end / mark id 0 / end",
+            "flow create 0 ingress pattern eth / ipv6 dst is ff01::2 proto is 6 / end actions mark id 2 / rss / end",
+        ]
+
+        # validate rules
+        self.validate_fdir_rule(rules, check_stats=True)
+        self.check_fdir_rule(port_id=0, stats=False)
+
+        # create rules
+        rule_li = self.create_fdir_rule(rules, check_stats=True)
+        self.check_fdir_rule(port_id=0, rule_list=rule_li)
+
+        # pkt1-4 in "match" match rule 0, pkt5-6 match rule 1.
+        out1 = self.send_pkts_getouput(MAC_IPV6_PAY_multicast_protocol["match"][0:4])
+        rfc.check_iavf_fdir_mark(
+            out1,
+            pkt_num=4,
+            check_param={"port_id": 0, "mark_id": 0, "queue": [5, 6]},
+            stats=True,
+        )
+
+        out2 = self.send_pkts_getouput(MAC_IPV6_PAY_multicast_protocol["match"][4:6])
+        rfc.check_iavf_fdir_mark(
+            out2,
+            pkt_num=2,
+            check_param={"port_id": 0, "mark_id": 2, "passthru": 1},
+            stats=True,
+        )
+
+        # send mismatched packets:
+        out3 = self.send_pkts_getouput(MAC_IPV6_PAY_multicast_protocol["mismatch"])
+        rfc.check_iavf_fdir_mark(
+            out3, pkt_num=3, check_param={"port_id": 0, "passthru": 1}, stats=False
+        )
+
+        # destroy the rules and check there is no rule listed.
+        self.destroy_fdir_rule(rule_id=rule_li, port_id=0)
+        self.check_fdir_rule(port_id=0, stats=False)
+
+        # send matched packet
+        out4 = self.send_pkts_getouput(MAC_IPV6_PAY_multicast_protocol["match"])
+        rfc.check_iavf_fdir_mark(
+            out4, pkt_num=6, check_param={"port_id": 0, "passthru": 1}, stats=False
+        )
+
     @skip_unsupported_pkg("os default")
     def test_mac_ipv4_gtpu_eh_without_teid(self):
         rules = [
@@ -11648,8 +11925,15 @@ class TestICEIAVFFdir(TestCase):
 
     def tear_down(self):
         # destroy all flow rule on port 0
-        self.dut.kill_all()
+        if self.running_case in [
+            "test_mac_ipv4_pay_multicast",
+            "test_mac_ipv4_multicast_protocol",
+            "test_mac_ipv6_pay_multicast",
+            "test_mac_ipv6_multicast_protocol",
+        ]:
+            self.pmd_output.execute_cmd("mcast_addr remove 0 11:22:33:44:55:66")
         self.destroy_env()
+        self.dut.kill_all()
         if getattr(self, "session_secondary", None):
             self.dut.close_session(self.session_secondary)
         if getattr(self, "session_third", None):
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dts][PATCH V3 2/4] test_plans/ice_iavf_fdir: add mulitcast new test case
  2022-09-14  5:38 [dts][PATCH V3 1/4] tests/ice_iavf_fdir: add multicast new test case Weiyuan Li
@ 2022-09-14  5:38 ` Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 3/4] tests/ice_advanced_iavf_rss: add multicast " Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 4/4] test_plans/ice_advanced_iavf_rss: " Weiyuan Li
  2 siblings, 0 replies; 4+ messages in thread
From: Weiyuan Li @ 2022-09-14  5:38 UTC (permalink / raw)
  To: dts; +Cc: Weiyuan Li, Jiale Song, Peng Yuan

Add ipv4/ipv6 multicast new case for dpdk22.07 new feature.

Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>
---
Tested-by: Jiale Song < songx.jiale@intel.com>
Acked-by: Peng Yuan <yuan.peng@intel.com>

v2:
-modify the ice_iavf_fdir scipt tear_down method and destroy
environment first.
V3:
-modify script and test plan disable promisc and trust mode.
-add multicast detailes description reference.
-modify script and test plan configure multicast address.

 test_plans/ice_iavf_fdir_test_plan.rst | 325 +++++++++++++++++++++++++
 1 file changed, 325 insertions(+)

diff --git a/test_plans/ice_iavf_fdir_test_plan.rst b/test_plans/ice_iavf_fdir_test_plan.rst
index 9f6b5aaf..50162e23 100644
--- a/test_plans/ice_iavf_fdir_test_plan.rst
+++ b/test_plans/ice_iavf_fdir_test_plan.rst
@@ -236,6 +236,11 @@ Default parameters
    VF00 MAC::
 
     [Dest MAC]: 00:11:22:33:44:55
+    [Multicast Dest MAC]: 11:22:33:44:55:66
+
+    .. note::
+
+        For multicast mac more details, please refer to https://tooabstractive.com/networking/how-do-you-know-if-a-mac-address-is-unicast-multicast-or-broadcast/
 
    VF01 MAC::
 
@@ -253,6 +258,7 @@ Default parameters
 
     [Source IP]: 192.168.0.20
     [Dest IP]: 192.168.0.21
+    [Multicast Dest IPv4]: 224.0.0.1
     [IP protocol]: 255
     [TTL]: 2
     [DSCP]: 4
@@ -261,10 +267,15 @@ Default parameters
 
     [Source IPv6]: 2001::2
     [Dest IPv6]: CDCD:910A:2222:5498:8475:1111:3900:2020
+    [Multicast Dest IPv6]: ff01::2
     [IP protocol]: 0
     [TTL]: 2
     [TC]: 1
 
+    .. note::
+
+        For multicast ip more details, please refer to https://ipcisco.com/lesson/multicast-ip-addresses-jncie/
+
    UDP/TCP/SCTP::
 
     [Source Port]: 22
@@ -303,6 +314,21 @@ Send packets
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=3, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
     sendp([Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.20",dst="192.168.0.21", proto=255, ttl=2, tos=9) / Raw('x' * 80)],iface="enp134s0f1")
 
+* MAC_IPV4_PAY multicast
+
+   matched packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=4)/UDP(sport=22,dport=23)/Raw('x' * 80)],iface="enp134s0f1")
+
+   mismatched packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.22",dst="224.0.0.1", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.2", proto=255, ttl=2, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=1, ttl=2, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=3, tos=4) / Raw('x' * 80)],iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=255, ttl=2, tos=9) / Raw('x' * 80)],iface="enp134s0f1")
+
 * MAC_IPV4_UDP
 
    matched packets::
@@ -366,6 +392,21 @@ Send packets
     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=2, hlim=2)/("X"*480)], iface="enp134s0f1")
     sendp([Ether(dst="00:11:22:33:44:55")/IPv6(dst="CDCD:910A:2222:5498:8475:1111:3900:2020", src="2001::2", nh=0, tc=1, hlim=5)/("X"*480)], iface="enp134s0f1")
 
+* MAC_IPV6_PAY multicast
+
+   matched packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=2)/UDP(sport=22,dport=23)/("X"*480)], iface="enp134s0f1")
+
+   mismatched packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::1", src="2001::2", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::1", nh=0, tc=1, hlim=2)/("X"*480)], iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=2, tc=1, hlim=2)/("X"*480)], iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=2, hlim=2)/("X"*480)], iface="enp134s0f1")
+    sendp([Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=0, tc=1, hlim=5)/("X"*480)], iface="enp134s0f1")
+
 * MAC_IPV6_UDP
 
    matched packets::
@@ -7268,3 +7309,287 @@ Subcase 6: MAC_IPV6_GRE_IPV6_UDP mark
 
 each subcase is the same as the subcase of Test case: MAC_IPV6_GRE_IPV6_TCP pattern, just only pattern is different,
 replace "tcp" with "udp" in all the subcases
+
+Test case: MAC_IPV4_PAY pattern multicast
+=========================================
+Disable promisc mode in the testpmd::
+
+   testpmd> set promisc all off
+
+Enable all multicast mode in the testpmd::
+
+   testpmd> set allmulti all on
+
+configure multicast address::
+
+   testpmd> mcast_addr add 0 11:22:33:44:55:66
+
+Subcase 1: MAC_IPV4_PAY queue index
+-----------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions queue index 1 / mark / end
+
+2. send multicast matched packets, check the packets are distributed to queue 1 without FDIR matched ID.
+   send multicast mismatched packets, check the packets are not distributed to queue 1 without FDIR matched ID.
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+
+   check the rule listed.
+   destroy the rule::
+
+    testpmd> flow destroy 0 rule 0
+
+4. verify matched packets are not distributed to queue 1 without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 2: MAC_IPV4_PAY rss queues
+----------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions rss queues 2 3 end / mark / end
+
+2. send multicast matched packets, check the packets are distributed to queue 2 or 3 without without FDIR matched ID.
+   send multicast mismatched packets, check the packets are not distributed to queue 2 or 3 without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are not distributed to queue 2 or 3 without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 3: MAC_IPV4_PAY passthru
+--------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions passthru / mark / end
+
+2. send multicast matched packets, check the packets are distributed by RSS without FDIR matched ID.
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID=0x0.
+   check there is no rule listed.
+
+Subcase 4: MAC_IPV4_PAY drop
+----------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions drop / mark / end
+
+2. send multicast matched packets, check the packets are dropped
+   send multicast mismatched packets, check the packets are not dropped.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are not dropped.
+   check there is no rule listed.
+
+Subcase 5: MAC_IPV4_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions mark / rss / end
+
+2. send multicast  matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send multicast  mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 6: MAC_IPV4_PAY mark
+----------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 src is 192.168.0.20 dst is 224.0.0.1 proto is 255 ttl is 2 tos is 4 / end actions mark / end
+
+2. send multicast matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 7: MAC_IPV4_PAY protocal
+--------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv4 dst is 224.0.0.1 proto is 1 / end actions queue index 1 / mark id 1 / end
+    flow create 0 ingress pattern eth / ipv4 dst is 224.0.0.1 proto is 17 / end actions passthru / mark id 3 / end
+
+2. send matched packets::
+
+    pkt1 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=1)/Raw('x' * 80)
+    pkt2 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.19",dst="224.0.0.1", proto=1)/Raw('x' * 80)
+    pkt3 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", ttl=2, tos=4)/UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt4 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=17)/UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt5 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=17, ttl=2, tos=4)/Raw('x' * 80)
+    pkt6 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", frag=1, proto=17, ttl=2, tos=4)/Raw('x' * 80)
+
+   check the pkt1 and pkt2 are redirected to queue 1 with FDIR matched ID=0x1.
+   check the pkt3-pkt6 are distributed by RSS with FDIR matched ID=0x3.
+   send mismatched packets::
+
+    pkt7 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.2", proto=1)/Raw('x' * 80)
+    pkt8 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", proto=6)/UDP(sport=22,dport=23)/Raw('x' * 80)
+    pkt9 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1")/TCP(sport=22,dport=23)/Raw('x' * 80)
+    pkt10 = Ether(dst="11:22:33:44:55:66")/IP(src="192.168.0.20",dst="224.0.0.1", ttl=2, tos=4)/TCP(sport=22,dport=23)/Raw('x' * 80)
+
+   check the packets received have not FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets have not FDIR matched ID.
+   check there is no rule listed.
+
+Test case: MAC_IPV6_PAY pattern multicast
+=========================================
+Disable promisc mode in the testpmd::
+
+   testpmd> set promisc all off
+
+Enable all multicast mode in the testpmd::
+
+   testpmd> set allmulti all on
+
+configure multicast address::
+
+   testpmd> mcast_addr add 0 11:22:33:44:55:66
+
+Subcase 1: MAC_IPV6_PAY queue index
+-----------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions queue index 15 / mark / end
+
+2. send multicast matched packets, check the packets is distributed to queue 15 with FDIR matched ID=0x0.
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. verify rules can be listed and destroyed::
+
+    testpmd> flow list 0
+
+   check the rule listed.
+   destroy the rule::
+
+    testpmd> flow destroy 0 rule 0
+
+4. verify matched packet is distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 2: MAC_IPV6_PAY rss queues
+----------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions rss queues 8 9 10 11 12 13 14 15 end / mark / end
+
+2. send multicast matched packets, check the packets is distributed to queue 8-15 with FDIR matched ID=0x0.
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet is distributed by RSS without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 3: MAC_IPV6_PAY passthru
+--------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions passthru / mark / end
+
+2. send multicast matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0.
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are destributed to the same queue without FDIR matched ID .
+   check there is no rule listed.
+
+Subcase 4: MAC_IPV6_PAY drop
+----------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions drop / mark / end
+
+2. send multicast matched packets, check the packets are dropped.
+   send multicast mismatched packets, check the packets are not dropped.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packet is dropped.
+   check there is no rule listed.
+
+Subcase 5: MAC_IPV6_PAY mark+rss
+--------------------------------
+Note: This combined action is mark with RSS which is without queues specified.
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / rss / end
+
+2. send multicast matched packets, check the packets are distributed by RSS with FDIR matched ID=0x0
+   send multicast mismatched packets, check the packets are distributed by RSS without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are distributed to the same queue without FDIR matched ID.
+   check there is no rule listed.
+
+Subcase 6: MAC_IPV6_PAY mark
+----------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 src is 2001::2 proto is 0 hop is 2 tc is 1 / end actions mark / end
+
+2. repeat the steps of passthru with mark part in subcase 3,
+   get the same result.
+
+Subcase 7: MAC_IPV6_PAY protocal
+--------------------------------
+
+1. create filter rules::
+
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 proto is 17 / end actions rss queues 5 6 end / mark id 0 / end
+    flow create 0 ingress pattern eth / ipv6 dst is ff01::2 proto is 6 / end actions mark id 2 / rss / end
+
+2. send matched packets::
+
+    pkt1 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", src="2001::2", nh=17, tc=1, hlim=2)/("X"*480)
+    pkt2 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)
+    pkt3 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=17)/TCP(sport=22,dport=23)/("X"*480)
+    pkt4 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/UDP(sport=22,dport=23)/TCP(sport=22,dport=23)/("X"*480)
+    pkt5 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=6)/("X"*480)
+    pkt6 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/TCP(sport=22,dport=23)/("X"*480)
+
+   check pkt1-pkt4 are redirected to queue 5 or queue 6 with FDIR matched ID=0x0.
+   check pkt5 and pkt6 are distributed by RSS with FDIR matched ID=0x2.
+   send mismatched packets::
+
+    pkt7 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::3", nh=1)/("X"*480)
+    pkt8 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2")/SCTP()/("X"*480)
+    pkt9 = Ether(dst="11:22:33:44:55:66")/IPv6(dst="ff01::2", nh=1)/TCP(sport=22,dport=23)/("X"*480)
+
+   check the packets are received without FDIR matched ID.
+
+3. repeat step 3 of subcase 1.
+
+4. verify matched packets are received without FDIR matched ID.
+   check there is no rule listed.
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dts][PATCH V3 3/4] tests/ice_advanced_iavf_rss: add multicast new test case
  2022-09-14  5:38 [dts][PATCH V3 1/4] tests/ice_iavf_fdir: add multicast new test case Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 2/4] test_plans/ice_iavf_fdir: add mulitcast " Weiyuan Li
@ 2022-09-14  5:38 ` Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 4/4] test_plans/ice_advanced_iavf_rss: " Weiyuan Li
  2 siblings, 0 replies; 4+ messages in thread
From: Weiyuan Li @ 2022-09-14  5:38 UTC (permalink / raw)
  To: dts; +Cc: Weiyuan Li, Jiale Song, Peng Yuan

Add ipv4/ipv6 multicast new case for dpdk22.07 new feature.

Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>
---
Tested-by: Jiale Song < songx.jiale@intel.com>
Acked-by: Peng Yuan <yuan.peng@intel.com>

v2:
-modify the ice_iavf_fdir scipt tear_down method and destroy
environment first.
V3:
-modify script and test plan disable promisc and trust mode.
-add multicast detailes description reference.
-modify script and test plan configure multicast address.

 tests/TestSuite_ice_advanced_iavf_rss.py | 613 +++++++++++++++++++++++
 1 file changed, 613 insertions(+)

diff --git a/tests/TestSuite_ice_advanced_iavf_rss.py b/tests/TestSuite_ice_advanced_iavf_rss.py
index bed1d1df..8e8d7319 100644
--- a/tests/TestSuite_ice_advanced_iavf_rss.py
+++ b/tests/TestSuite_ice_advanced_iavf_rss.py
@@ -80,6 +80,18 @@ mac_ipv6_toeplitz_basic_pkt = {
     # ],
 }
 
+mac_ipv6_toeplitz_basic_multicast_pkt = {
+    "ipv6-nonfrag": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)',
+    ],
+    "ipv6-icmp": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)',
+    ],
+    "ipv6-udp": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)',
+    ],
+}
+
 mac_ipv6_udp_toeplitz_basic_pkt = {
     "ipv6-udp": [
         'Ether(dst="%s", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=22,dport=23)/("X"*480)'
@@ -90,6 +102,296 @@ mac_ipv6_udp_toeplitz_basic_pkt = {
     # ],
 }
 
+mac_ipv4_toeplitz_basic_multicast_pkt = {
+    "ipv4-nonfrag": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)',
+    ],
+    "ipv4-icmp": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+    ],
+    "ipv4-tcp": [
+        'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+    ],
+}
+
+# mac_ipv4 multicast
+mac_ipv4_l2_src_multicast = {
+    "sub_casename": "mac_ipv4_l2_src_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+mac_ipv4_l2_dst_multicast = {
+    "sub_casename": "mac_ipv4_l2_dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+mac_ipv4_l2src_l2dst_multicast = {
+    "sub_casename": "mac_ipv4_l2src_l2dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=23,dport=25)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+mac_ipv4_l3_src_multicast = {
+    "sub_casename": "mac_ipv4_l3_src_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+mac_ipv4_l3_dst_multicast = {
+    "sub_casename": "mac_ipv4_l3_dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+mac_ipv4_all_multicast = {
+    "sub_casename": "mac_ipv4_all_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-nonfrag"],
+            "action": {"save_hash": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)',
+            "action": {"check_hash_different": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)',
+            "action": {"check_hash_same": "ipv4-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-icmp"],
+            "action": {"save_hash": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv4-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv4-icmp"},
+        },
+        {
+            "send_packet": mac_ipv4_toeplitz_basic_multicast_pkt["ipv4-tcp"],
+            "action": {"save_hash": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv4-tcp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv4-tcp"},
+        },
+    ],
+}
+
+
 mac_ipv6_tcp_toeplitz_basic_pkt = {
     "ipv6-tcp": [
         'Ether(dst="%s", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/TCP(sport=22,dport=23)/("X"*480)'
@@ -1416,6 +1718,282 @@ mac_ipv4_tcp_chksum = [
     for element in mac_ipv4_udp_chksum
 ]
 
+# mac_ipv6 multicast
+mac_ipv6_l2_src_multicast = {
+    "sub_casename": "mac_ipv6_l2_src_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
+
+mac_ipv6_l2_dst_multicast = {
+    "sub_casename": "mac_ipv6_l2_dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
+
+mac_ipv6_l2src_l2dst_multicast = {
+    "sub_casename": "mac_ipv6_l2src_l2dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/UDP(sport=25,dport=99)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
+
+mac_ipv6_l3_src_multicast = {
+    "sub_casename": "mac_ipv6_l3_src_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::25")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::25")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
+
+mac_ipv6_l3_dst_multicast = {
+    "sub_casename": "mac_ipv6_l3_dst_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
+
+mac_ipv6_all_multicast = {
+    "sub_casename": "mac_ipv6_all_multicast",
+    "port_id": 0,
+    "rule": "flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end",
+    "test": [
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-nonfrag"],
+            "action": {"save_hash": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_different": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)',
+            "action": {"check_hash_same": "ipv6-nonfrag"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-icmp"],
+            "action": {"save_hash": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_different": "ipv6-icmp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)',
+            "action": {"check_hash_same": "ipv6-icmp"},
+        },
+        {
+            "send_packet": mac_ipv6_toeplitz_basic_multicast_pkt["ipv6-udp"],
+            "action": {"save_hash": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)',
+            "action": {"check_hash_different": "ipv6-udp"},
+        },
+        {
+            "send_packet": 'Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)',
+            "action": {"check_hash_same": "ipv6-udp"},
+        },
+    ],
+}
 # mac ipv4_sctp
 mac_ipv4_sctp_l2_src = {
     "sub_casename": "mac_ipv4_sctp_l2_src",
@@ -3424,6 +4002,16 @@ mac_ipv4 = [
     mac_ipv4_l3_dst,
     mac_ipv4_all,
 ]
+
+mac_ipv4_multicast = [
+    mac_ipv4_l2_src_multicast,
+    mac_ipv4_l2_dst_multicast,
+    mac_ipv4_l2src_l2dst_multicast,
+    mac_ipv4_l3_src_multicast,
+    mac_ipv4_l3_dst_multicast,
+    mac_ipv4_all_multicast,
+]
+
 mac_ipv4_ipv4_chksum = [mac_ipv4_ipv4_chksum]
 
 mac_ipv4_udp = [
@@ -3480,6 +4068,15 @@ mac_ipv6 = [
     mac_ipv6_all,
 ]
 
+mac_ipv6_multicast = [
+    mac_ipv6_l2_src_multicast,
+    mac_ipv6_l2_dst_multicast,
+    mac_ipv6_l2src_l2dst_multicast,
+    mac_ipv6_l3_src_multicast,
+    mac_ipv6_l3_dst_multicast,
+    mac_ipv6_all_multicast,
+]
+
 mac_ipv6_udp = [
     mac_ipv6_udp_l2_src,
     mac_ipv6_udp_l2_dst,
@@ -5860,12 +6457,22 @@ class AdvancedIavfRSSTest(TestCase):
         self.pmd_output.execute_cmd("port config all rss all")
         self.pmd_output.execute_cmd("set fwd rxonly")
         self.pmd_output.execute_cmd("set verbose 1")
+        if self.running_case in ["test_mac_ipv4_multicast", "test_mac_ipv6_multicast"]:
+            self.pmd_output.execute_cmd("set promisc all off")
+            self.pmd_output.execute_cmd("set allmulti all on")
+            # add multicast mac address to pmd
+            self.pmd_output.execute_cmd("mcast_addr add 0 11:22:33:44:55:66")
+            self.pmd_output.execute_cmd("mcast_addr add 0 11:22:33:44:55:67")
+
         res = self.pmd_output.wait_link_status_up("all", timeout=15)
         self.verify(res is True, "there have port link is down")
 
     def test_mac_ipv4(self):
         self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4)
 
+    def test_mac_ipv4_multicast(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_multicast)
+
     def test_mac_ipv4_udp(self):
         self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv4_udp)
 
@@ -5878,6 +6485,9 @@ class AdvancedIavfRSSTest(TestCase):
     def test_mac_ipv6(self):
         self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6)
 
+    def test_mac_ipv6_multicast(self):
+        self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_multicast)
+
     def test_mac_ipv6_udp(self):
         self.rssprocess.handle_rss_distribute_cases(cases_info=mac_ipv6_udp)
 
@@ -6655,6 +7265,9 @@ class AdvancedIavfRSSTest(TestCase):
         # destroy all flow rule on port 0
         self.dut.send_command("flow flush 0", timeout=1)
         self.dut.send_command("clear port stats all", timeout=1)
+        if self.running_case in ["test_mac_ipv4_multicast", "test_mac_ipv6_multicast"]:
+            self.pmd_output.execute_cmd("mcast_addr remove 0 11:22:33:44:55:66")
+            self.pmd_output.execute_cmd("mcast_addr remove 0 11:22:33:44:55:67")
         self.pmd_output.execute_cmd("stop")
         self.pmd_output.execute_cmd("quit", "#")
         if self.running_case == "test_flow_rule_not_impact_rx_tx_chksum":
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dts][PATCH V3 4/4] test_plans/ice_advanced_iavf_rss: add multicast new test case
  2022-09-14  5:38 [dts][PATCH V3 1/4] tests/ice_iavf_fdir: add multicast new test case Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 2/4] test_plans/ice_iavf_fdir: add mulitcast " Weiyuan Li
  2022-09-14  5:38 ` [dts][PATCH V3 3/4] tests/ice_advanced_iavf_rss: add multicast " Weiyuan Li
@ 2022-09-14  5:38 ` Weiyuan Li
  2 siblings, 0 replies; 4+ messages in thread
From: Weiyuan Li @ 2022-09-14  5:38 UTC (permalink / raw)
  To: dts; +Cc: Weiyuan Li, Jiale Song, Peng Yuan

Add ipv4/ipv6 multicast new case for dpdk22.07 new feature.

Signed-off-by: Weiyuan Li <weiyuanx.li@intel.com>
---
Tested-by: Jiale Song < songx.jiale@intel.com>
Acked-by: Peng Yuan <yuan.peng@intel.com>

v2:
-modify the ice_iavf_fdir scipt tear_down method and destroy
environment first.
V3:
-modify script and test plan disable promisc and trust mode.
-add multicast detailes description reference.
-modify script and test plan configure multicast address.

 .../ice_advanced_iavf_rss_test_plan.rst       | 454 ++++++++++++++++++
 1 file changed, 454 insertions(+)

diff --git a/test_plans/ice_advanced_iavf_rss_test_plan.rst b/test_plans/ice_advanced_iavf_rss_test_plan.rst
index 4213334b..e448c58b 100644
--- a/test_plans/ice_advanced_iavf_rss_test_plan.rst
+++ b/test_plans/ice_advanced_iavf_rss_test_plan.rst
@@ -336,16 +336,27 @@ Default parameters
 
     [Src MAC]: 68:05:CA:BB:26:E0
     [Dest MAC]: 00:11:22:33:44:55
+    [Multicast Dest MAC]: 11:22:33:44:55:66
+
+    .. note::
+
+        For multicast mac more details, please refer to https://tooabstractive.com/networking/how-do-you-know-if-a-mac-address-is-unicast-multicast-or-broadcast/
 
    IPv4::
 
     [Dest IP]: 192.168.0.1
     [Source IP]: 192.168.0.2
+    [Multicast Dest IPv4]: 224.0.0.1
 
    IPv6::
 
     [Source IPv6]: ABAB:910B:6666:3457:8295:3333:1800:2929
     [Dest IPv6]: CDCD:910A:2222:5498:8475:1111:3900:2020
+    [Multicast Dest IPv6]: ff01::2
+
+    .. note::
+
+        For multicast ip more details, please refer to https://ipcisco.com/lesson/multicast-ip-addresses-jncie/
 
    UDP/TCP/SCTP::
 
@@ -896,6 +907,227 @@ Subcase: MAC_IPV4_SCTP_IPV4
 Subcase: MAC_IPV4_SCTP_ALL
 --------------------------
 
+Test case: MAC_IPV4 multicast
+=============================
+Disable promisc mode in the testpmd::
+
+   testpmd> set promisc all off
+
+Enable all multicast mode in the testpmd::
+
+   testpmd> set allmulti all on
+
+configure multicast address::
+
+   testpmd> mcast_addr add 0 11:22:33:44:55:66
+
+basic hit pattern packets are the same in this multicast test case:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_L2SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_L2DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=19,dport=99)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_L2SRC_L2DST
+-----------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types eth end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.0.5")/TCP(sport=23,dport=25)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_L3SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.2", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_L3DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 l3-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV4_ALL
+---------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4 end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.2.1", src="192.168.0.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IP(dst="224.0.0.1", src="192.168.1.2")/TCP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv4-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/("X"*480)],iface="enp134s0f0")
+
+ipv4-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv4-tcp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IP(dst="224.0.0.1", src="192.168.0.2")/TCP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
 
 Test case: MAC_IPV6
 ===================
@@ -1096,6 +1328,228 @@ ipv6-udp packets::
 
     sendp([Ether(dst="00:11:22:33:44:55", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="CDCD:910A:2222:5498:8475:1111:3900:2020")/UDP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
 
+Test case: MAC_IPV6 multicast
+=============================
+Disable promisc mode in the testpmd::
+
+   testpmd> set promisc all off
+
+Enable all multicast mode in the testpmd::
+
+   testpmd> set allmulti all on
+
+configure multicast address::
+
+   testpmd> mcast_addr add 0 11:22:33:44:55:66
+
+basic hit pattern packets are the same in this test case, including unicast and multicast::
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_L2SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_L2DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth l2-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:67", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::23")/UDP(sport=25,dport=99)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_L2SRC_L2DST
+-----------------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types eth end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2923",dst="ff01::25")/UDP(sport=25,dport=99)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_L3SRC
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-src-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::25")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::25")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_L3DST
+-----------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 l3-dst-only end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::25")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
+
+Subcase: MAC_IPV6_ALL
+---------------------
+1. create rss rule::
+
+    flow create 0 ingress pattern eth / ipv6 / end actions rss types ipv6 end key_len 0 queues end / end
+
+2. hit pattern/defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/ICMP()/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::21")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E0")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2928",dst="ff01::2")/UDP(sport=22,dport=23)/("X"*480)],iface="enp134s0f0")
+
+3. hit pattern/not defined input set:
+ipv6-nonfrag packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/("X"*480)],iface="enp134s0f0")
+
+ipv6-icmp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/ICMP()/("X"*480)],iface="enp134s0f0")
+
+ipv6-udp packets::
+
+    sendp([Ether(dst="11:22:33:44:55:66", src="68:05:CA:BB:26:E1")/IPv6(src="ABAB:910B:6666:3457:8295:3333:1800:2929",dst="ff01::2")/UDP(sport=32,dport=33)/("X"*480)],iface="enp134s0f0")
 
 Test case: MAC_IPV6_64BIT_PREFIX
 =================================
-- 
2.17.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-09-14  5:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-14  5:38 [dts][PATCH V3 1/4] tests/ice_iavf_fdir: add multicast new test case Weiyuan Li
2022-09-14  5:38 ` [dts][PATCH V3 2/4] test_plans/ice_iavf_fdir: add mulitcast " Weiyuan Li
2022-09-14  5:38 ` [dts][PATCH V3 3/4] tests/ice_advanced_iavf_rss: add multicast " Weiyuan Li
2022-09-14  5:38 ` [dts][PATCH V3 4/4] test_plans/ice_advanced_iavf_rss: " Weiyuan Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).