1 from scapy.layers.l2 import ARP
2 from scapy.layers.inet6 import ICMPv6ND_NS, ICMPv6ND_NA, IPv6
4 from framework import VppTestCase
6 """ TestArping is a subclass of VPPTestCase classes.
8 Basic test for sanity check of arping.
13 class TestArping(VppTestCase):
14 """Arping Test Case"""
18 super(TestArping, cls).setUpClass()
20 cls.create_pg_interfaces(range(2))
21 cls.interfaces = list(cls.pg_interfaces)
23 for i in cls.interfaces:
31 super(TestArping, cls).tearDownClass()
35 def tearDownClass(cls):
36 super(TestArping, cls).tearDownClass()
39 super(TestArping, self).tearDown()
41 def show_commands_at_teardown(self):
42 self.logger.info(self.vapi.cli("show hardware"))
44 def verify_arping_request(self, p, src, dst):
46 self.assertEqual(arp.hwtype, 0x0001)
47 self.assertEqual(arp.ptype, 0x0800)
48 self.assertEqual(arp.hwlen, 6)
49 self.assertEqual(arp.op, 1)
50 self.assertEqual(arp.psrc, src)
51 self.assertEqual(arp.pdst, dst)
53 def verify_arping_ip6_ns(self, p, src, dst):
54 icmpv6 = p[ICMPv6ND_NS]
55 self.assertEqual(icmpv6.type, 135)
56 self.assertEqual(icmpv6.tgt, dst)
58 self.assertEqual(src, ipv6.src)
60 def verify_arping_ip6_na(self, p, src, dst):
61 icmpv6 = p[ICMPv6ND_NA]
62 self.assertEqual(icmpv6.type, 136)
63 self.assertEqual(icmpv6.tgt, dst)
65 self.assertEqual(src, ipv6.src)
67 def test_arping_ip4_arp_request_cli(self):
68 """arping IP4 arp request CLI test"""
70 self.pg_enable_capture(self.pg_interfaces)
72 remote_ip4 = self.pg1.remote_ip4
74 ping_cmd = "arping " + remote_ip4 + "pg1 repeat 5 interval 0.1"
75 ret = self.vapi.cli(ping_cmd)
78 ping_cmd = "arping " + remote_ip4 + "pg1"
79 ret = self.vapi.cli(ping_cmd)
82 out = self.pg1.get_capture(6)
84 self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.remote_ip4)
86 self.vapi.cli("show error")
88 def test_arping_ip4_garp_cli(self):
89 """arping ip4 gratuitous arp CLI test"""
91 self.pg_enable_capture(self.pg_interfaces)
95 "arping gratuitous" + self.pg1.local_ip4 + "pg1 repeat 5 interval 0.1"
97 ret = self.vapi.cli(ping_cmd)
100 ping_cmd = "arping gratuitous" + self.pg1.local_ip4 + "pg1"
101 ret = self.vapi.cli(ping_cmd)
102 self.logger.info(ret)
104 out = self.pg1.get_capture(6)
106 self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.local_ip4)
108 self.vapi.cli("show error")
110 def test_arping_ip4_arp_request_api(self):
111 """arping ip4 arp request API test"""
113 self.pg_enable_capture(self.pg_interfaces)
115 remote_ip4 = self.pg1.remote_ip4
117 ret = self.vapi.arping(
119 sw_if_index=self.pg1.sw_if_index,
124 self.logger.info(ret)
126 ret = self.vapi.arping(
127 address=remote_ip4, sw_if_index=self.pg1.sw_if_index, is_garp=0
129 self.logger.info(ret)
131 out = self.pg1.get_capture(6)
133 self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.remote_ip4)
135 self.vapi.cli("show error")
137 def test_arping_ip4_garp_api(self):
138 """arping ip4 gratuitous arp API test"""
140 self.pg_enable_capture(self.pg_interfaces)
143 ret = self.vapi.arping(
144 address=self.pg1.local_ip4,
145 sw_if_index=self.pg1.sw_if_index,
150 self.logger.info(ret)
152 ret = self.vapi.arping(
153 address=self.pg1.local_ip4, sw_if_index=self.pg1.sw_if_index, is_garp=1
155 self.logger.info(ret)
157 out = self.pg1.get_capture(6)
159 self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.local_ip4)
161 self.vapi.cli("show error")
163 def test_arping_ip6_ns_cli(self):
164 """arping IP6 neighbor solicitation CLI test"""
166 self.pg_enable_capture(self.pg_interfaces)
168 remote_ip6 = self.pg1.remote_ip6
170 ping_cmd = "arping " + remote_ip6 + "pg1 repeat 5 interval 0.1"
171 ret = self.vapi.cli(ping_cmd)
172 self.logger.info(ret)
174 ping_cmd = "arping " + remote_ip6 + "pg1"
175 ret = self.vapi.cli(ping_cmd)
176 self.logger.info(ret)
178 out = self.pg1.get_capture(6)
180 self.verify_arping_ip6_ns(p, self.pg1.local_ip6, self.pg1.remote_ip6)
182 self.vapi.cli("show error")
184 def test_arping_ip6_ns_api(self):
185 """arping ip6 neighbor solicitation API test"""
187 self.pg_enable_capture(self.pg_interfaces)
189 remote_ip6 = self.pg1.remote_ip6
191 ret = self.vapi.arping(
193 sw_if_index=self.pg1.sw_if_index,
198 self.logger.info(ret)
200 ret = self.vapi.arping(
201 address=remote_ip6, sw_if_index=self.pg1.sw_if_index, is_garp=0
203 self.logger.info(ret)
205 out = self.pg1.get_capture(6)
207 self.verify_arping_ip6_ns(p, self.pg1.local_ip6, self.pg1.remote_ip6)
209 self.vapi.cli("show error")
211 def test_arping_ip6_na_cli(self):
212 """arping ip6 neighbor advertisement CLI test"""
214 self.pg_enable_capture(self.pg_interfaces)
218 "arping gratuitous" + self.pg1.local_ip6 + "pg1 repeat 5 interval 0.1"
220 ret = self.vapi.cli(ping_cmd)
221 self.logger.info(ret)
223 ping_cmd = "arping gratuitous" + self.pg1.local_ip6 + "pg1"
224 ret = self.vapi.cli(ping_cmd)
225 self.logger.info(ret)
227 out = self.pg1.get_capture(6)
229 self.verify_arping_ip6_na(p, self.pg1.local_ip6, self.pg1.local_ip6)
231 self.vapi.cli("show error")
233 def test_arping_ip6_na_api(self):
234 """arping ip6 neighbor advertisement API test"""
236 self.pg_enable_capture(self.pg_interfaces)
239 ret = self.vapi.arping(
240 address=self.pg1.local_ip6,
241 sw_if_index=self.pg1.sw_if_index,
246 self.logger.info(ret)
248 ret = self.vapi.arping(
249 address=self.pg1.local_ip6, sw_if_index=self.pg1.sw_if_index, is_garp=1
251 self.logger.info(ret)
253 out = self.pg1.get_capture(6)
255 self.verify_arping_ip6_na(p, self.pg1.local_ip6, self.pg1.local_ip6)
257 self.vapi.cli("show error")
260 if __name__ == "__main__":
261 unittest.main(testRunner=VppTestRunner)