tests: Add UT to test incomplete MPLS adjacencies send ARP requests
Type: test Change-Id: I81e07233aec54c786e4e9beb8c4f06d0a3dca90f Signed-off-by: Neale Ranns <nranns@cisco.com> (cherry picked from commit 1976f36b09ead86874feb630277dfaeceed9c0fe)
This commit is contained in:
parent
5371a224a8
commit
72ab186f13
@ -14,13 +14,19 @@ from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
|
||||
|
||||
import scapy.compat
|
||||
from scapy.packet import Raw
|
||||
from scapy.layers.l2 import Ether
|
||||
from scapy.layers.l2 import Ether, ARP
|
||||
from scapy.layers.inet import IP, UDP, ICMP
|
||||
from scapy.layers.inet6 import IPv6, ICMPv6TimeExceeded
|
||||
from scapy.contrib.mpls import MPLS
|
||||
|
||||
NUM_PKTS = 67
|
||||
|
||||
# scapy removed these attributes.
|
||||
# we asked that they be restored: https://github.com/secdev/scapy/pull/1878
|
||||
# semantic names have more meaning than numbers. so here they are.
|
||||
ARP.who_has = 1
|
||||
ARP.is_at = 2
|
||||
|
||||
|
||||
def verify_filter(capture, sent):
|
||||
if not len(capture) == len(sent):
|
||||
@ -2044,10 +2050,9 @@ class TestMPLSL2(VppTestCase):
|
||||
tbl.add_vpp_config()
|
||||
self.tables.append(tbl)
|
||||
|
||||
# use pg0 as the core facing interface
|
||||
# use pg0 as the core facing interface, don't resolve ARP
|
||||
self.pg0.admin_up()
|
||||
self.pg0.config_ip4()
|
||||
self.pg0.resolve_arp()
|
||||
self.pg0.enable_mpls()
|
||||
|
||||
# use the other 2 for customer facing L2 links
|
||||
@ -2081,6 +2086,22 @@ class TestMPLSL2(VppTestCase):
|
||||
self.assertEqual(rx_eth.src, tx_eth.src)
|
||||
self.assertEqual(rx_eth.dst, tx_eth.dst)
|
||||
|
||||
def verify_arp_req(self, rx, smac, sip, dip):
|
||||
ether = rx[Ether]
|
||||
self.assertEqual(ether.dst, "ff:ff:ff:ff:ff:ff")
|
||||
self.assertEqual(ether.src, smac)
|
||||
|
||||
arp = rx[ARP]
|
||||
self.assertEqual(arp.hwtype, 1)
|
||||
self.assertEqual(arp.ptype, 0x800)
|
||||
self.assertEqual(arp.hwlen, 6)
|
||||
self.assertEqual(arp.plen, 4)
|
||||
self.assertEqual(arp.op, ARP.who_has)
|
||||
self.assertEqual(arp.hwsrc, smac)
|
||||
self.assertEqual(arp.hwdst, "00:00:00:00:00:00")
|
||||
self.assertEqual(arp.psrc, sip)
|
||||
self.assertEqual(arp.pdst, dip)
|
||||
|
||||
def test_vpws(self):
|
||||
""" Virtual Private Wire Service """
|
||||
|
||||
@ -2141,7 +2162,21 @@ class TestMPLSL2(VppTestCase):
|
||||
|
||||
#
|
||||
# Inject a packet from the customer/L2 side
|
||||
# there's no resolved ARP entry so the first packet we see should be
|
||||
# an ARP request
|
||||
#
|
||||
tx1 = pcore[MPLS].payload
|
||||
rx1 = self.send_and_expect(self.pg1, [tx1], self.pg0)
|
||||
|
||||
self.verify_arp_req(rx1[0],
|
||||
self.pg0.local_mac,
|
||||
self.pg0.local_ip4,
|
||||
self.pg0.remote_ip4)
|
||||
|
||||
#
|
||||
# resolve the ARP entries and send again
|
||||
#
|
||||
self.pg0.resolve_arp()
|
||||
tx1 = pcore[MPLS].payload * NUM_PKTS
|
||||
rx1 = self.send_and_expect(self.pg1, tx1, self.pg0)
|
||||
|
||||
@ -2149,6 +2184,10 @@ class TestMPLSL2(VppTestCase):
|
||||
|
||||
def test_vpls(self):
|
||||
""" Virtual Private LAN Service """
|
||||
|
||||
# we skipped this in the setup
|
||||
self.pg0.resolve_arp()
|
||||
|
||||
#
|
||||
# Create a L2 MPLS tunnels
|
||||
#
|
||||
|
Loading…
x
Reference in New Issue
Block a user