+class TestVxlanL2Mode(VppTestCase):
+ """ VXLAN Test Case """
+ def setUp(self):
+ super(TestVxlanL2Mode, self).setUp()
+
+ # Create 2 pg interfaces.
+ self.create_pg_interfaces(range(2))
+ for pg in self.pg_interfaces:
+ pg.admin_up()
+
+ # Configure IPv4 addresses on VPP pg0.
+ self.pg0.config_ip4()
+ self.pg0.resolve_arp()
+
+ # Configure IPv4 addresses on VPP pg1.
+ self.pg1.config_ip4()
+
+ def tearDown(self):
+ super(TestVxlanL2Mode, self).tearDown()
+
+ def test_l2_mode(self):
+ """ VXLAN L2 mode """
+ t = VppVxlanTunnel(self,
+ src=self.pg0.local_ip4,
+ dst=self.pg0.remote_ip4,
+ vni=1000, is_l3=False)
+ t.add_vpp_config()
+ t.config_ip4()
+ t.admin_up()
+
+ dstIP = t.local_ip4[:-1] + "2"
+
+ # Create a packet to send
+ p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
+ IP(src=self.pg1.local_ip4, dst=dstIP) /
+ UDP(sport=555, dport=556) /
+ Raw(b'\x00' * 80))
+
+ # Expect ARP request
+ rx = self.send_and_expect(self.pg1, [p], self.pg0)
+ for p in rx:
+ self.assertEqual(p[Ether].dst, self.pg0.remote_mac)
+ self.assertEqual(p[Ether].src, self.pg0.local_mac)
+ self.assertEqual(p[ARP].op, 1)
+ self.assertEqual(p[ARP].pdst, dstIP)
+
+ # Resolve ARP
+ VppNeighbor(self, t.sw_if_index,
+ self.pg1.remote_mac,
+ dstIP).add_vpp_config()
+
+ # Send packets
+ NUM_PKTS = 128
+ rx = self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg0)
+ self.assertEqual(NUM_PKTS, len(rx))
+
+