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,
87 self.vapi.cli("show error")
89 def test_arping_ip4_garp_cli(self):
90 """ arping ip4 gratuitous arp CLI test """
92 self.pg_enable_capture(self.pg_interfaces)
95 ping_cmd = ("arping gratuitous" + self.pg1.local_ip4 +
96 "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,
109 self.vapi.cli("show error")
111 def test_arping_ip4_arp_request_api(self):
112 """ arping ip4 arp request API test """
114 self.pg_enable_capture(self.pg_interfaces)
116 remote_ip4 = self.pg1.remote_ip4
118 ret = self.vapi.arping(address=remote_ip4,
119 sw_if_index=self.pg1.sw_if_index,
120 is_garp=0, repeat=5, interval=0.1)
121 self.logger.info(ret)
123 ret = self.vapi.arping(address=remote_ip4,
124 sw_if_index=self.pg1.sw_if_index,
126 self.logger.info(ret)
128 out = self.pg1.get_capture(6)
130 self.verify_arping_request(p, self.pg1.local_ip4,
133 self.vapi.cli("show error")
135 def test_arping_ip4_garp_api(self):
136 """ arping ip4 gratuitous arp API test """
138 self.pg_enable_capture(self.pg_interfaces)
141 ret = self.vapi.arping(address=self.pg1.local_ip4,
142 sw_if_index=self.pg1.sw_if_index,
143 is_garp=1, repeat=5, interval=0.1)
144 self.logger.info(ret)
146 ret = self.vapi.arping(address=self.pg1.local_ip4,
147 sw_if_index=self.pg1.sw_if_index,
149 self.logger.info(ret)
151 out = self.pg1.get_capture(6)
153 self.verify_arping_request(p, self.pg1.local_ip4,
156 self.vapi.cli("show error")
158 def test_arping_ip6_ns_cli(self):
159 """ arping IP6 neighbor solicitation CLI test """
161 self.pg_enable_capture(self.pg_interfaces)
163 remote_ip6 = self.pg1.remote_ip6
165 ping_cmd = "arping " + remote_ip6 + "pg1 repeat 5 interval 0.1"
166 ret = self.vapi.cli(ping_cmd)
167 self.logger.info(ret)
169 ping_cmd = "arping " + remote_ip6 + "pg1"
170 ret = self.vapi.cli(ping_cmd)
171 self.logger.info(ret)
173 out = self.pg1.get_capture(6)
175 self.verify_arping_ip6_ns(p, self.pg1.local_ip6,
178 self.vapi.cli("show error")
180 def test_arping_ip6_ns_api(self):
181 """ arping ip6 neighbor solicitation API test """
183 self.pg_enable_capture(self.pg_interfaces)
185 remote_ip6 = self.pg1.remote_ip6
187 ret = self.vapi.arping(address=remote_ip6,
188 sw_if_index=self.pg1.sw_if_index,
189 is_garp=0, repeat=5, interval=0.1)
190 self.logger.info(ret)
192 ret = self.vapi.arping(address=remote_ip6,
193 sw_if_index=self.pg1.sw_if_index,
195 self.logger.info(ret)
197 out = self.pg1.get_capture(6)
199 self.verify_arping_ip6_ns(p, self.pg1.local_ip6,
202 self.vapi.cli("show error")
204 def test_arping_ip6_na_cli(self):
205 """ arping ip6 neighbor advertisement CLI test """
207 self.pg_enable_capture(self.pg_interfaces)
210 ping_cmd = ("arping gratuitous" + self.pg1.local_ip6 +
211 "pg1 repeat 5 interval 0.1")
212 ret = self.vapi.cli(ping_cmd)
213 self.logger.info(ret)
215 ping_cmd = "arping gratuitous" + self.pg1.local_ip6 + "pg1"
216 ret = self.vapi.cli(ping_cmd)
217 self.logger.info(ret)
219 out = self.pg1.get_capture(6)
221 self.verify_arping_ip6_na(p, self.pg1.local_ip6,
224 self.vapi.cli("show error")
226 def test_arping_ip6_na_api(self):
227 """ arping ip6 neighbor advertisement API test """
229 self.pg_enable_capture(self.pg_interfaces)
232 ret = self.vapi.arping(address=self.pg1.local_ip6,
233 sw_if_index=self.pg1.sw_if_index,
234 is_garp=1, repeat=5, interval=0.1)
235 self.logger.info(ret)
237 ret = self.vapi.arping(address=self.pg1.local_ip6,
238 sw_if_index=self.pg1.sw_if_index,
240 self.logger.info(ret)
242 out = self.pg1.get_capture(6)
244 self.verify_arping_ip6_na(p, self.pg1.local_ip6,
247 self.vapi.cli("show error")
250 if __name__ == '__main__':
251 unittest.main(testRunner=VppTestRunner)