summaryrefslogtreecommitdiffstats
path: root/test/test_dhcp.py
diff options
context:
space:
mode:
authorKlement Sekera <klement.sekera@gmail.com>2022-04-26 19:02:15 +0200
committerOle Tr�an <otroan@employees.org>2022-05-10 18:52:08 +0000
commitd9b0c6fbf7aa5bd9af84264105b39c82028a4a29 (patch)
tree4f786cfd8ebc2443cb11e11b74c8657204068898 /test/test_dhcp.py
parentf90348bcb4afd0af2611cefc43b17ef3042b511c (diff)
tests: replace pycodestyle with black
Drop pycodestyle for code style checking in favor of black. Black is much faster, stable PEP8 compliant code style checker offering also automatic formatting. It aims to be very stable and produce smallest diffs. It's used by many small and big projects. Running checkstyle with black takes a few seconds with a terse output. Thus, test-checkstyle-diff is no longer necessary. Expand scope of checkstyle to all python files in the repo, replacing test-checkstyle with checkstyle-python. Also, fixstyle-python is now available for automatic style formatting. Note: python virtualenv has been consolidated in test/Makefile, test/requirements*.txt which will eventually be moved to a central location. This is required to simply the automated generation of docker executor images in the CI. Type: improvement Change-Id: I022a326603485f58585e879ac0f697fceefbc9c8 Signed-off-by: Klement Sekera <klement.sekera@gmail.com> Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Diffstat (limited to 'test/test_dhcp.py')
-rw-r--r--test/test_dhcp.py1171
1 files changed, 641 insertions, 530 deletions
diff --git a/test/test_dhcp.py b/test/test_dhcp.py
index a3b410c0595..a349356119a 100644
--- a/test/test_dhcp.py
+++ b/test/test_dhcp.py
@@ -16,9 +16,19 @@ from scapy.layers.inet import IP, UDP, ICMP
from scapy.layers.inet6 import IPv6, in6_getnsmac
from scapy.utils6 import in6_mactoifaceid
from scapy.layers.dhcp import DHCP, BOOTP, DHCPTypes
-from scapy.layers.dhcp6 import DHCP6, DHCP6_Solicit, DHCP6_RelayForward, \
- DHCP6_RelayReply, DHCP6_Advertise, DHCP6OptRelayMsg, DHCP6OptIfaceId, \
- DHCP6OptStatusCode, DHCP6OptVSS, DHCP6OptClientLinkLayerAddr, DHCP6_Request
+from scapy.layers.dhcp6 import (
+ DHCP6,
+ DHCP6_Solicit,
+ DHCP6_RelayForward,
+ DHCP6_RelayReply,
+ DHCP6_Advertise,
+ DHCP6OptRelayMsg,
+ DHCP6OptIfaceId,
+ DHCP6OptStatusCode,
+ DHCP6OptVSS,
+ DHCP6OptClientLinkLayerAddr,
+ DHCP6_Request,
+)
from socket import AF_INET, AF_INET6, inet_pton, inet_ntop
from scapy.utils6 import in6_ptop
from vpp_papi import mac_pton, VppEnum
@@ -35,7 +45,7 @@ DHCP6_SERVER_PORT = 546
@tag_run_solo
class TestDHCP(VppTestCase):
- """ DHCP Test Case """
+ """DHCP Test Case"""
@classmethod
def setUpClass(cls):
@@ -136,8 +146,7 @@ class TestDHCP(VppTestCase):
self.assertEqual(six.byte2int(data[2:3]), 0)
self.assertEqual(six.byte2int(data[3:4]), 0)
self.assertEqual(six.byte2int(data[4:5]), 0)
- self.assertEqual(six.byte2int(data[5:6]),
- intf._sw_if_index)
+ self.assertEqual(six.byte2int(data[5:6]), intf._sw_if_index)
#
# next sub-option is the IP address of the client side
@@ -179,16 +188,15 @@ class TestDHCP(VppTestCase):
self.assertEqual(six.byte2int(data[12:13]), 151)
self.assertEqual(six.byte2int(data[13:14]), id_len + 1)
self.assertEqual(six.byte2int(data[14:15]), 0)
- self.assertEqual(data[15:15 + id_len].decode('ascii'),
- vpn_id)
+ self.assertEqual(data[15 : 15 + id_len].decode("ascii"), vpn_id)
# VSS control sub-option
- self.assertEqual(six.byte2int(data[15 + len(vpn_id):
- 16 + len(vpn_id)]),
- 152)
- self.assertEqual(six.byte2int(data[16 + len(vpn_id):
- 17 + len(vpn_id)]),
- 0)
+ self.assertEqual(
+ six.byte2int(data[15 + len(vpn_id) : 16 + len(vpn_id)]), 152
+ )
+ self.assertEqual(
+ six.byte2int(data[16 + len(vpn_id) : 17 + len(vpn_id)]), 0
+ )
found = 1
self.assertTrue(found)
@@ -200,8 +208,7 @@ class TestDHCP(VppTestCase):
found = False
for o in dhcp.options:
if isinstance(o, tuple):
- if o[0] == "message-type" \
- and DHCPTypes[o[1]] == name:
+ if o[0] == "message-type" and DHCPTypes[o[1]] == name:
found = True
self.assertTrue(found)
@@ -219,8 +226,9 @@ class TestDHCP(VppTestCase):
self.assertEqual(udp.sport, DHCP4_SERVER_PORT)
self.verify_dhcp_msg_type(pkt, "offer")
- data = self.validate_relay_options(pkt, intf, intf.local_ip4,
- vpn_id, fib_id, oui)
+ data = self.validate_relay_options(
+ pkt, intf, intf.local_ip4, vpn_id, fib_id, oui
+ )
def verify_orig_dhcp_pkt(self, pkt, intf, dscp, l2_bc=True):
ether = pkt[Ether]
@@ -232,7 +240,7 @@ class TestDHCP(VppTestCase):
ip = pkt[IP]
- if (l2_bc):
+ if l2_bc:
self.assertEqual(ip.dst, "255.255.255.255")
self.assertEqual(ip.src, "0.0.0.0")
else:
@@ -244,17 +252,16 @@ class TestDHCP(VppTestCase):
self.assertEqual(udp.dport, DHCP4_SERVER_PORT)
self.assertEqual(udp.sport, DHCP4_CLIENT_PORT)
- def verify_orig_dhcp_discover(self, pkt, intf, hostname, client_id=None,
- broadcast=True, dscp=0):
+ def verify_orig_dhcp_discover(
+ self, pkt, intf, hostname, client_id=None, broadcast=True, dscp=0
+ ):
self.verify_orig_dhcp_pkt(pkt, intf, dscp)
self.verify_dhcp_msg_type(pkt, "discover")
- self.verify_dhcp_has_option(pkt, "hostname",
- hostname.encode('ascii'))
+ self.verify_dhcp_has_option(pkt, "hostname", hostname.encode("ascii"))
if client_id:
- client_id = '\x00' + client_id
- self.verify_dhcp_has_option(pkt, "client_id",
- client_id.encode('ascii'))
+ client_id = "\x00" + client_id
+ self.verify_dhcp_has_option(pkt, "client_id", client_id.encode("ascii"))
bootp = pkt[BOOTP]
self.assertEqual(bootp.ciaddr, "0.0.0.0")
self.assertEqual(bootp.giaddr, "0.0.0.0")
@@ -263,15 +270,13 @@ class TestDHCP(VppTestCase):
else:
self.assertEqual(bootp.flags, 0x0000)
- def verify_orig_dhcp_request(self, pkt, intf, hostname, ip,
- broadcast=True,
- l2_bc=True,
- dscp=0):
+ def verify_orig_dhcp_request(
+ self, pkt, intf, hostname, ip, broadcast=True, l2_bc=True, dscp=0
+ ):
self.verify_orig_dhcp_pkt(pkt, intf, dscp, l2_bc=l2_bc)
self.verify_dhcp_msg_type(pkt, "request")
- self.verify_dhcp_has_option(pkt, "hostname",
- hostname.encode('ascii'))
+ self.verify_dhcp_has_option(pkt, "hostname", hostname.encode("ascii"))
self.verify_dhcp_has_option(pkt, "requested_addr", ip)
bootp = pkt[BOOTP]
@@ -286,10 +291,17 @@ class TestDHCP(VppTestCase):
else:
self.assertEqual(bootp.flags, 0x0000)
- def verify_relayed_dhcp_discover(self, pkt, intf, src_intf=None,
- fib_id=0, oui=0,
- vpn_id="",
- dst_mac=None, dst_ip=None):
+ def verify_relayed_dhcp_discover(
+ self,
+ pkt,
+ intf,
+ src_intf=None,
+ fib_id=0,
+ oui=0,
+ vpn_id="",
+ dst_mac=None,
+ dst_ip=None,
+ ):
if not dst_mac:
dst_mac = intf.remote_mac
if not dst_ip:
@@ -312,24 +324,27 @@ class TestDHCP(VppTestCase):
is_discover = False
for o in dhcp.options:
if isinstance(o, tuple):
- if o[0] == "message-type" \
- and DHCPTypes[o[1]] == "discover":
+ if o[0] == "message-type" and DHCPTypes[o[1]] == "discover":
is_discover = True
self.assertTrue(is_discover)
- data = self.validate_relay_options(pkt, src_intf,
- src_intf.local_ip4,
- vpn_id,
- fib_id, oui)
+ data = self.validate_relay_options(
+ pkt, src_intf, src_intf.local_ip4, vpn_id, fib_id, oui
+ )
return data
- def verify_dhcp6_solicit(self, pkt, intf,
- peer_ip, peer_mac,
- vpn_id="",
- fib_id=0,
- oui=0,
- dst_mac=None,
- dst_ip=None):
+ def verify_dhcp6_solicit(
+ self,
+ pkt,
+ intf,
+ peer_ip,
+ peer_mac,
+ vpn_id="",
+ fib_id=0,
+ oui=0,
+ dst_mac=None,
+ dst_ip=None,
+ ):
if not dst_mac:
dst_mac = intf.remote_mac
if not dst_ip:
@@ -377,8 +392,7 @@ class TestDHCP(VppTestCase):
vss = pkt[DHCP6OptVSS]
self.assertEqual(vss.optlen, id_len + 1)
self.assertEqual(vss.type, 0)
- self.assertEqual(vss.data[0:id_len].decode('ascii'),
- vpn_id)
+ self.assertEqual(vss.data[0:id_len].decode("ascii"), vpn_id)
# the relay message should be an encoded Solicit
msg = pkt[DHCP6OptRelayMsg]
@@ -402,9 +416,8 @@ class TestDHCP(VppTestCase):
# not sure why this is not decoding
# adv = pkt[DHCP6_Advertise]
- def wait_for_no_route(self, address, length,
- n_tries=50, s_time=1):
- while (n_tries):
+ def wait_for_no_route(self, address, length, n_tries=50, s_time=1):
+ while n_tries:
if not find_route(self, address, length):
return True
n_tries = n_tries - 1
@@ -413,42 +426,45 @@ class TestDHCP(VppTestCase):
return False
def test_dhcp_proxy(self):
- """ DHCPv4 Proxy """
+ """DHCPv4 Proxy"""
#
# Verify no response to DHCP request without DHCP config
#
- p_disc_vrf0 = (Ether(dst="ff:ff:ff:ff:ff:ff",
- src=self.pg3.remote_mac) /
- IP(src="0.0.0.0", dst="255.255.255.255") /
- UDP(sport=DHCP4_CLIENT_PORT,
- dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'discover'), ('end')]))
+ p_disc_vrf0 = (
+ Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg3.remote_mac)
+ / IP(src="0.0.0.0", dst="255.255.255.255")
+ / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(options=[("message-type", "discover"), ("end")])
+ )
pkts_disc_vrf0 = [p_disc_vrf0]
- p_disc_vrf1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
- src=self.pg4.remote_mac) /
- IP(src="0.0.0.0", dst="255.255.255.255") /
- UDP(sport=DHCP4_CLIENT_PORT,
- dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'discover'), ('end')]))
+ p_disc_vrf1 = (
+ Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg4.remote_mac)
+ / IP(src="0.0.0.0", dst="255.255.255.255")
+ / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(options=[("message-type", "discover"), ("end")])
+ )
pkts_disc_vrf1 = [p_disc_vrf1]
- p_disc_vrf2 = (Ether(dst="ff:ff:ff:ff:ff:ff",
- src=self.pg5.remote_mac) /
- IP(src="0.0.0.0", dst="255.255.255.255") /
- UDP(sport=DHCP4_CLIENT_PORT,
- dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'discover'), ('end')]))
+ p_disc_vrf2 = (
+ Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg5.remote_mac)
+ / IP(src="0.0.0.0", dst="255.255.255.255")
+ / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(options=[("message-type", "discover"), ("end")])
+ )
pkts_disc_vrf2 = [p_disc_vrf2]
- self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
- "DHCP with no configuration")
- self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
- "DHCP with no configuration")
- self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
- "DHCP with no configuration")
+ self.send_and_assert_no_replies(
+ self.pg3, pkts_disc_vrf0, "DHCP with no configuration"
+ )
+ self.send_and_assert_no_replies(
+ self.pg4, pkts_disc_vrf1, "DHCP with no configuration"
+ )
+ self.send_and_assert_no_replies(
+ self.pg5, pkts_disc_vrf2, "DHCP with no configuration"
+ )
#
# Enable DHCP proxy in VRF 0
@@ -463,23 +479,25 @@ class TestDHCP(VppTestCase):
# Discover packets from the client are dropped because there is no
# IP address configured on the client facing interface
#
- self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
- "Discover DHCP no relay address")
+ self.send_and_assert_no_replies(
+ self.pg3, pkts_disc_vrf0, "Discover DHCP no relay address"
+ )
#
# Inject a response from the server
# dropped, because there is no IP addrees on the
# client interfce to fill in the option.
#
- p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'), ('end')]))
+ p = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(options=[("message-type", "offer"), ("end")])
+ )
pkts = [p]
- self.send_and_assert_no_replies(self.pg3, pkts,
- "Offer DHCP no relay address")
+ self.send_and_assert_no_replies(self.pg3, pkts, "Offer DHCP no relay address")
#
# configure an IP address on the client facing interface
@@ -500,21 +518,26 @@ class TestDHCP(VppTestCase):
rx = self.pg0.get_capture(1)
rx = rx[0]
- option_82 = self.verify_relayed_dhcp_discover(rx, self.pg0,
- src_intf=self.pg3)
+ option_82 = self.verify_relayed_dhcp_discover(rx, self.pg0, src_intf=self.pg3)
#
# Create an DHCP offer reply from the server with a correctly formatted
# option 82. i.e. send back what we just captured
# The offer, sent mcast to the client, still has option 82.
#
- p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', option_82),
- ('end')]))
+ p = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", option_82),
+ ("end"),
+ ]
+ )
+ )
pkts = [p]
self.pg0.add_stream(pkts)
@@ -533,36 +556,51 @@ class TestDHCP(VppTestCase):
# to client
bad_ip = option_82[0:8] + scapy.compat.chb(33) + option_82[9:]
- p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', bad_ip),
- ('end')]))
+ p = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", bad_ip),
+ ("end"),
+ ]
+ )
+ )
pkts = [p]
- self.send_and_assert_no_replies(self.pg0, pkts,
- "DHCP offer option 82 bad address")
+ self.send_and_assert_no_replies(
+ self.pg0, pkts, "DHCP offer option 82 bad address"
+ )
# 2. Not a sw_if_index VPP knows
bad_if_index = option_82[0:2] + scapy.compat.chb(33) + option_82[3:]
- p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', bad_if_index),
- ('end')]))
+ p = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", bad_if_index),
+ ("end"),
+ ]
+ )
+ )
pkts = [p]
- self.send_and_assert_no_replies(self.pg0, pkts,
- "DHCP offer option 82 bad if index")
+ self.send_and_assert_no_replies(
+ self.pg0, pkts, "DHCP offer option 82 bad if index"
+ )
#
# Send a DHCP request in VRF 1. should be dropped.
#
- self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
- "DHCP with no configuration VRF 1")
+ self.send_and_assert_no_replies(
+ self.pg4, pkts_disc_vrf1, "DHCP with no configuration VRF 1"
+ )
#
# Delete the DHCP config in VRF 0
@@ -570,10 +608,12 @@ class TestDHCP(VppTestCase):
#
Proxy.remove_vpp_config()
- self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
- "DHCP config removed VRF 0")
- self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
- "DHCP config removed VRF 1")
+ self.send_and_assert_no_replies(
+ self.pg3, pkts_disc_vrf0, "DHCP config removed VRF 0"
+ )
+ self.send_and_assert_no_replies(
+ self.pg4, pkts_disc_vrf1, "DHCP config removed VRF 1"
+ )
#
# Add DHCP config for VRF 1 & 2
@@ -581,31 +621,27 @@ class TestDHCP(VppTestCase):
server_addr1 = self.pg1.remote_ip4
src_addr1 = self.pg1.local_ip4
Proxy1 = VppDHCPProxy(
- self,
- server_addr1,
- src_addr1,
- rx_vrf_id=1,
- server_vrf_id=1)
+ self, server_addr1, src_addr1, rx_vrf_id=1, server_vrf_id=1
+ )
Proxy1.add_vpp_config()
server_addr2 = self.pg2.remote_ip4
src_addr2 = self.pg2.local_ip4
Proxy2 = VppDHCPProxy(
- self,
- server_addr2,
- src_addr2,
- rx_vrf_id=2,
- server_vrf_id=2)
+ self, server_addr2, src_addr2, rx_vrf_id=2, server_vrf_id=2
+ )
Proxy2.add_vpp_config()
#
# Confim DHCP requests ok in VRF 1 & 2.
# - dropped on IP config on client interface
#
- self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
- "DHCP config removed VRF 1")
- self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
- "DHCP config removed VRF 2")
+ self.send_and_assert_no_replies(
+ self.pg4, pkts_disc_vrf1, "DHCP config removed VRF 1"
+ )
+ self.send_and_assert_no_replies(
+ self.pg5, pkts_disc_vrf2, "DHCP config removed VRF 2"
+ )
#
# configure an IP address on the client facing interface
@@ -630,10 +666,10 @@ class TestDHCP(VppTestCase):
# Add VSS config
# table=1, vss_type=1, vpn_index=1, oui=4
# table=2, vss_type=0, vpn_id = "ip4-table-2"
- self.vapi.dhcp_proxy_set_vss(tbl_id=1, vss_type=1,
- vpn_index=1, oui=4, is_add=1)
- self.vapi.dhcp_proxy_set_vss(tbl_id=2, vss_type=0,
- vpn_ascii_id="ip4-table-2", is_add=1)
+ self.vapi.dhcp_proxy_set_vss(tbl_id=1, vss_type=1, vpn_index=1, oui=4, is_add=1)
+ self.vapi.dhcp_proxy_set_vss(
+ tbl_id=2, vss_type=0, vpn_ascii_id="ip4-table-2", is_add=1
+ )
self.pg4.add_stream(pkts_disc_vrf1)
self.pg_enable_capture(self.pg_interfaces)
@@ -641,9 +677,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
rx = rx[0]
- self.verify_relayed_dhcp_discover(rx, self.pg1,
- src_intf=self.pg4,
- fib_id=1, oui=4)
+ self.verify_relayed_dhcp_discover(
+ rx, self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+ )
self.pg5.add_stream(pkts_disc_vrf2)
self.pg_enable_capture(self.pg_interfaces)
@@ -651,9 +687,9 @@ class TestDHCP(VppTestCase):
rx = self.pg2.get_capture(1)
rx = rx[0]
- self.verify_relayed_dhcp_discover(rx, self.pg2,
- src_intf=self.pg5,
- vpn_id="ip4-table-2")
+ self.verify_relayed_dhcp_discover(
+ rx, self.pg2, src_intf=self.pg5, vpn_id="ip4-table-2"
+ )
#
# Add a second DHCP server in VRF 1
@@ -663,20 +699,19 @@ class TestDHCP(VppTestCase):
server_addr12 = self.pg1.remote_hosts[1].ip4
Proxy12 = VppDHCPProxy(
- self,
- server_addr12,
- src_addr,
- rx_vrf_id=1,
- server_vrf_id=1)
+ self, server_addr12, src_addr, rx_vrf_id=1, server_vrf_id=1
+ )
Proxy12.add_vpp_config()
#
# We'll need an ARP entry for the server to send it packets
#
- arp_entry = VppNeighbor(self,
- self.pg1.sw_if_index,
- self.pg1.remote_hosts[1].mac,
- self.pg1.remote_hosts[1].ip4)
+ arp_entry = VppNeighbor(
+ self,
+ self.pg1.sw_if_index,
+ self.pg1.remote_hosts[1].mac,
+ self.pg1.remote_hosts[1].ip4,
+ )
arp_entry.add_vpp_config()
#
@@ -691,32 +726,47 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(2)
option_82 = self.verify_relayed_dhcp_discover(
- rx[0], self.pg1,
+ rx[0],
+ self.pg1,
src_intf=self.pg4,
dst_mac=self.pg1.remote_hosts[1].mac,
dst_ip=self.pg1.remote_hosts[1].ip4,
- fib_id=1, oui=4)
- self.verify_relayed_dhcp_discover(rx[1], self.pg1,
- src_intf=self.pg4,
- fib_id=1, oui=4)
+ fib_id=1,
+ oui=4,
+ )
+ self.verify_relayed_dhcp_discover(
+ rx[1], self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+ )
#
# Send both packets back. Client gets both.
#
- p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
- IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', option_82),
- ('end')]))
- p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
- IP(src=self.pg1.remote_hosts[1].ip4, dst=self.pg1.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', option_82),
- ('end')]))
+ p1 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+ / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", option_82),
+ ("end"),
+ ]
+ )
+ )
+ p2 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+ / IP(src=self.pg1.remote_hosts[1].ip4, dst=self.pg1.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", option_82),
+ ("end"),
+ ]
+ )
+ )
pkts = [p1, p2]
self.pg1.add_stream(pkts)
@@ -731,27 +781,31 @@ class TestDHCP(VppTestCase):
#
# Ensure offers from non-servers are dropeed
#
- p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
- IP(src="8.8.8.8", dst=self.pg1.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'offer'),
- ('relay_agent_Information', option_82),
- ('end')]))
- self.send_and_assert_no_replies(self.pg1, p2,
- "DHCP offer from non-server")
+ p2 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+ / IP(src="8.8.8.8", dst=self.pg1.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("relay_agent_Information", option_82),
+ ("end"),
+ ]
+ )
+ )
+ self.send_and_assert_no_replies(self.pg1, p2, "DHCP offer from non-server")
#
# Ensure only the discover is sent to multiple servers
#
- p_req_vrf1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
- src=self.pg4.remote_mac) /
- IP(src="0.0.0.0", dst="255.255.255.255") /
- UDP(sport=DHCP4_CLIENT_PORT,
- dport=DHCP4_SERVER_PORT) /
- BOOTP(op=1) /
- DHCP(options=[('message-type', 'request'),
- ('end')]))
+ p_req_vrf1 = (
+ Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg4.remote_mac)
+ / IP(src="0.0.0.0", dst="255.255.255.255")
+ / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+ / BOOTP(op=1)
+ / DHCP(options=[("message-type", "request"), ("end")])
+ )
self.pg4.add_stream(p_req_vrf1)
self.pg_enable_capture(self.pg_interfaces)
@@ -773,9 +827,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
rx = rx[0]
- self.verify_relayed_dhcp_discover(rx, self.pg1,
- src_intf=self.pg4,
- fib_id=1, oui=4)
+ self.verify_relayed_dhcp_discover(
+ rx, self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+ )
#
# Remove the VSS config
@@ -798,19 +852,16 @@ class TestDHCP(VppTestCase):
Proxy1.remove_vpp_config()
Proxy2.remove_vpp_config()
- self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
- "DHCP cleanup VRF 0")
- self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
- "DHCP cleanup VRF 1")
- self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
- "DHCP cleanup VRF 2")
+ self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0, "DHCP cleanup VRF 0")
+ self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1, "DHCP cleanup VRF 1")
+ self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2, "DHCP cleanup VRF 2")
self.pg3.unconfig_ip4()
self.pg4.unconfig_ip4()
self.pg5.unconfig_ip4()
def test_dhcp6_proxy(self):
- """ DHCPv6 Proxy"""
+ """DHCPv6 Proxy"""
#
# Verify no response to DHCP request without DHCP config
#
@@ -826,31 +877,34 @@ class TestDHCP(VppTestCase):
src_addr_vrf2 = self.pg2.local_ip6
dmac = in6_getnsmac(inet_pton(socket.AF_INET6, dhcp_solicit_dst))
- p_solicit_vrf0 = (Ether(dst=dmac, src=self.pg3.remote_mac) /
- IPv6(src=dhcp_solicit_src_vrf0,
- dst=dhcp_solicit_dst) /
- UDP(sport=DHCP6_SERVER_PORT,
- dport=DHCP6_CLIENT_PORT) /
- DHCP6_Solicit())
- p_solicit_vrf1 = (Ether(dst=dmac, src=self.pg4.remote_mac) /
- IPv6(src=dhcp_solicit_src_vrf1,
- dst=dhcp_solicit_dst) /
- UDP(sport=DHCP6_SERVER_PORT,
- dport=DHCP6_CLIENT_PORT) /
- DHCP6_Solicit())
- p_solicit_vrf2 = (Ether(dst=dmac, src=self.pg5.remote_mac) /
- IPv6(src=dhcp_solicit_src_vrf2,
- dst=dhcp_solicit_dst) /
- UDP(sport=DHCP6_SERVER_PORT,
- dport=DHCP6_CLIENT_PORT) /
- DHCP6_Solicit())
-
- self.send_and_assert_no_replies(self.pg3, p_solicit_vrf0,
- "DHCP with no configuration")
- self.send_and_assert_no_replies(self.pg4, p_solicit_vrf1,
- "DHCP with no configuration")
- self.send_and_assert_no_replies(self.pg5, p_solicit_vrf2,
- "DHCP with no configuration")
+ p_solicit_vrf0 = (
+ Ether(dst=dmac, src=self.pg3.remote_mac)
+ / IPv6(src=dhcp_solicit_src_vrf0, dst=dhcp_solicit_dst)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+ / DHCP6_Solicit()
+ )
+ p_solicit_vrf1 = (
+ Ether(dst=dmac, src=self.pg4.remote_mac)
+ / IPv6(src=dhcp_solicit_src_vrf1, dst=dhcp_solicit_dst)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+ / DHCP6_Solicit()
+ )
+ p_solicit_vrf2 = (
+ Ether(dst=dmac, src=self.pg5.remote_mac)
+ / IPv6(src=dhcp_solicit_src_vrf2, dst=dhcp_solicit_dst)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+ / DHCP6_Solicit()
+ )
+
+ self.send_and_assert_no_replies(
+ self.pg3, p_solicit_vrf0, "DHCP with no configuration"
+ )
+ self.send_and_assert_no_replies(
+ self.pg4, p_solicit_vrf1, "DHCP with no configuration"
+ )
+ self.send_and_assert_no_replies(
+ self.pg5, p_solicit_vrf2, "DHCP with no configuration"
+ )
#
# DHCPv6 config in VRF 0.
@@ -858,17 +912,16 @@ class TestDHCP(VppTestCase):
# IPv6 config
#
Proxy = VppDHCPProxy(
- self,
- server_addr_vrf0,
- src_addr_vrf0,
- rx_vrf_id=0,
- server_vrf_id=0)
+ self, server_addr_vrf0, src_addr_vrf0, rx_vrf_id=0, server_vrf_id=0
+ )
Proxy.add_vpp_config()
- self.send_and_assert_no_replies(self.pg3, p_solicit_vrf0,
- "DHCP with no configuration")
- self.send_and_assert_no_replies(self.pg4, p_solicit_vrf1,
- "DHCP with no configuration")
+ self.send_and_assert_no_replies(
+ self.pg3, p_solicit_vrf0, "DHCP with no configuration"
+ )
+ self.send_and_assert_no_replies(
+ self.pg4, p_solicit_vrf1, "DHCP with no configuration"
+ )
#
# configure an IP address on the client facing interface
@@ -884,62 +937,70 @@ class TestDHCP(VppTestCase):
rx = self.pg0.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg0,
- dhcp_solicit_src_vrf0,
- self.pg3.remote_mac)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg0, dhcp_solicit_src_vrf0, self.pg3.remote_mac
+ )
#
# Exception cases for rejected relay responses
#
# 1 - not a relay reply
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_Advertise())
- self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
- "DHCP6 not a relay reply")
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_Advertise()
+ )
+ self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 not a relay reply")
# 2 - no relay message option
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply() /
- DHCP6_Advertise())
- self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
- "DHCP not a relay message")
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply()
+ / DHCP6_Advertise()
+ )
+ self.send_and_assert_no_replies(
+ self.pg3, p_adv_vrf0, "DHCP not a relay message"
+ )
# 3 - no circuit ID
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply() /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise())
- self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
- "DHCP6 no circuit ID")
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply()
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise()
+ )
+ self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 no circuit ID")
# 4 - wrong circuit ID
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply() /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise())
- self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
- "DHCP6 wrong circuit ID")
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply()
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise()
+ )
+ self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 wrong circuit ID")
#
# Send the relay response (the advertisement)
# - no peer address
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply() /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x04') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply()
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x04")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
pkts_adv_vrf0 = [p_adv_vrf0]
self.pg0.add_stream(pkts_adv_vrf0)
@@ -953,14 +1014,16 @@ class TestDHCP(VppTestCase):
#
# Send the relay response (the advertisement)
# - with peer address
- p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
- IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf0) /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x04') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
+ p_adv_vrf0 = (
+ Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+ / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf0)
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x04")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
pkts_adv_vrf0 = [p_adv_vrf0]
self.pg0.add_stream(pkts_adv_vrf0)
@@ -975,20 +1038,14 @@ class TestDHCP(VppTestCase):
# Add all the config for VRF 1 & 2
#
Proxy1 = VppDHCPProxy(
- self,
- server_addr_vrf1,
- src_addr_vrf1,
- rx_vrf_id=1,
- server_vrf_id=1)
+ self, server_addr_vrf1, src_addr_vrf1, rx_vrf_id=1, server_vrf_id=1
+ )
Proxy1.add_vpp_config()
self.pg4.config_ip6()
Proxy2 = VppDHCPProxy(
- self,
- server_addr_vrf2,
- src_addr_vrf2,
- rx_vrf_id=2,
- server_vrf_id=2)
+ self, server_addr_vrf2, src_addr_vrf2, rx_vrf_id=2, server_vrf_id=2
+ )
Proxy2.add_vpp_config()
self.pg5.config_ip6()
@@ -1001,9 +1058,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+ )
#
# VRF 2 solicit
@@ -1014,21 +1071,23 @@ class TestDHCP(VppTestCase):
rx = self.pg2.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg2,
- dhcp_solicit_src_vrf2,
- self.pg5.remote_mac)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg2, dhcp_solicit_src_vrf2, self.pg5.remote_mac
+ )
#
# VRF 1 Advert
#
- p_adv_vrf1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
- IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
+ p_adv_vrf1 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+ / IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
pkts_adv_vrf1 = [p_adv_vrf1]
self.pg1.add_stream(pkts_adv_vrf1)
@@ -1043,13 +1102,11 @@ class TestDHCP(VppTestCase):
# Add VSS config
#
self.vapi.dhcp_proxy_set_vss(
- tbl_id=1, vss_type=1, oui=4, vpn_index=1, is_ipv6=1, is_add=1)
+ tbl_id=1, vss_type=1, oui=4, vpn_index=1, is_ipv6=1, is_add=1
+ )
self.vapi.dhcp_proxy_set_vss(
- tbl_id=2,
- vss_type=0,
- vpn_ascii_id="IPv6-table-2",
- is_ipv6=1,
- is_add=1)
+ tbl_id=2, vss_type=0, vpn_ascii_id="IPv6-table-2", is_ipv6=1, is_add=1
+ )
self.pg4.add_stream(p_solicit_vrf1)
self.pg_enable_capture(self.pg_interfaces)
@@ -1057,11 +1114,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac,
- fib_id=1,
- oui=4)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac, fib_id=1, oui=4
+ )
self.pg5.add_stream(p_solicit_vrf2)
self.pg_enable_capture(self.pg_interfaces)
@@ -1069,10 +1124,13 @@ class TestDHCP(VppTestCase):
rx = self.pg2.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg2,
- dhcp_solicit_src_vrf2,
- self.pg5.remote_mac,
- vpn_id="IPv6-table-2")
+ self.verify_dhcp6_solicit(
+ rx[0],
+ self.pg2,
+ dhcp_solicit_src_vrf2,
+ self.pg5.remote_mac,
+ vpn_id="IPv6-table-2",
+ )
#
# Remove the VSS config
@@ -1086,9 +1144,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+ )
#
# Add a second DHCP server in VRF 1
@@ -1098,20 +1156,19 @@ class TestDHCP(VppTestCase):
server_addr12 = self.pg1.remote_hosts[1].ip6
Proxy12 = VppDHCPProxy(
- self,
- server_addr12,
- src_addr_vrf1,
- rx_vrf_id=1,
- server_vrf_id=1)
+ self, server_addr12, src_addr_vrf1, rx_vrf_id=1, server_vrf_id=1
+ )
Proxy12.add_vpp_config()
#
# We'll need an ND entry for the server to send it packets
#
- nd_entry = VppNeighbor(self,
- self.pg1.sw_if_index,
- self.pg1.remote_hosts[1].mac,
- self.pg1.remote_hosts[1].ip6)
+ nd_entry = VppNeighbor(
+ self,
+ self.pg1.sw_if_index,
+ self.pg1.remote_hosts[1].mac,
+ self.pg1.remote_hosts[1].ip6,
+ )
nd_entry.add_vpp_config()
#
@@ -1125,34 +1182,41 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(2)
- self.verify_dhcp6_solicit(rx[0], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac)
- self.verify_dhcp6_solicit(rx[1], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac,
- dst_mac=self.pg1.remote_hosts[1].mac,
- dst_ip=self.pg1.remote_hosts[1].ip6)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+ )
+ self.verify_dhcp6_solicit(
+ rx[1],
+ self.pg1,
+ dhcp_solicit_src_vrf1,
+ self.pg4.remote_mac,
+ dst_mac=self.pg1.remote_hosts[1].mac,
+ dst_ip=self.pg1.remote_hosts[1].ip6,
+ )
#
# Send both packets back. Client gets both.
#
- p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
- IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
- p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac) /
- IPv6(dst=self.pg1.local_ip6, src=self.pg1._remote_hosts[1].ip6) /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
+ p1 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+ / IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
+ p2 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac)
+ / IPv6(dst=self.pg1.local_ip6, src=self.pg1._remote_hosts[1].ip6)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
pkts = [p1, p2]
@@ -1168,12 +1232,12 @@ class TestDHCP(VppTestCase):
#
# Ensure only solicit messages are duplicated
#
- p_request_vrf1 = (Ether(dst=dmac, src=self.pg4.remote_mac) /
- IPv6(src=dhcp_solicit_src_vrf1,
- dst=dhcp_solicit_dst) /
- UDP(sport=DHCP6_SERVER_PORT,
- dport=DHCP6_CLIENT_PORT) /
- DHCP6_Request())
+ p_request_vrf1 = (
+ Ether(dst=dmac, src=self.pg4.remote_mac)
+ / IPv6(src=dhcp_solicit_src_vrf1, dst=dhcp_solicit_dst)
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+ / DHCP6_Request()
+ )
self.pg4.add_stream(p_request_vrf1)
self.pg_enable_capture(self.pg_interfaces)
@@ -1185,16 +1249,17 @@ class TestDHCP(VppTestCase):
# Test we drop DHCP packets from addresses that are not configured as
# DHCP servers
#
- p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac) /
- IPv6(dst=self.pg1.local_ip6, src="3001::1") /
- UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
- DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
- DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
- DHCP6OptRelayMsg(optlen=0) /
- DHCP6_Advertise(trid=1) /
- DHCP6OptStatusCode(statuscode=0))
- self.send_and_assert_no_replies(self.pg1, p2,
- "DHCP6 not from server")
+ p2 = (
+ Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac)
+ / IPv6(dst=self.pg1.local_ip6, src="3001::1")
+ / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+ / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+ / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+ / DHCP6OptRelayMsg(optlen=0)
+ / DHCP6_Advertise(trid=1)
+ / DHCP6OptStatusCode(statuscode=0)
+ )
+ self.send_and_assert_no_replies(self.pg1, p2, "DHCP6 not from server")
#
# Remove the second DHCP server
@@ -1210,9 +1275,9 @@ class TestDHCP(VppTestCase):
rx = self.pg1.get_capture(1)
- self.verify_dhcp6_solicit(rx[0], self.pg1,
- dhcp_solicit_src_vrf1,
- self.pg4.remote_mac)
+ self.verify_dhcp6_solicit(
+ rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+ )
#
# Cleanup
@@ -1226,10 +1291,10 @@ class TestDHCP(VppTestCase):
self.pg5.unconfig_ip6()
def test_dhcp_client(self):
- """ DHCP Client"""
+ """DHCP Client"""
vdscp = VppEnum.vl_api_ip_dscp_t
- hostname = 'universal-dp'
+ hostname = "universal-dp"
self.pg_enable_capture(self.pg_interfaces)
@@ -1247,38 +1312,50 @@ class TestDHCP(VppTestCase):
#
# Send back on offer, expect the request
#
- p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1,
- yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'offer'),
- ('server_id', self.pg3.remote_ip4),
- 'end']))
+ p_offer = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("server_id", self.pg3.remote_ip4),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_offer)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
- self.pg3.local_ip4)
+ self.verify_orig_dhcp_request(rx[0], self.pg3, hostname, self.pg3.local_ip4)
#
# Send an acknowledgment
#
- p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'ack'),
- ('subnet_mask', "255.255.255.0"),
- ('router', self.pg3.remote_ip4),
- ('server_id', self.pg3.remote_ip4),
- ('lease_time', 43200),
- 'end']))
+ p_ack = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "ack"),
+ ("subnet_mask", "255.255.255.0"),
+ ("router", self.pg3.remote_ip4),
+ ("server_id", self.pg3.remote_ip4),
+ ("lease_time", 43200),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_ack)
self.pg_enable_capture(self.pg_interfaces)
@@ -1317,16 +1394,19 @@ class TestDHCP(VppTestCase):
self.pg3.admin_down()
self.sleep(1)
self.pg3.admin_up()
- Client.set_client(self.pg3.sw_if_index, hostname,
- id=self.pg3.local_mac,
- dscp=vdscp.IP_API_DSCP_EF)
+ Client.set_client(
+ self.pg3.sw_if_index,
+ hostname,
+ id=self.pg3.local_mac,
+ dscp=vdscp.IP_API_DSCP_EF,
+ )
Client.add_vpp_config()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
- self.pg3.local_mac,
- dscp=vdscp.IP_API_DSCP_EF)
+ self.verify_orig_dhcp_discover(
+ rx[0], self.pg3, hostname, self.pg3.local_mac, dscp=vdscp.IP_API_DSCP_EF
+ )
# TODO: VPP DHCP client should not accept DHCP OFFER message with
# the XID (Transaction ID) not matching the XID of the most recent
@@ -1338,24 +1418,31 @@ class TestDHCP(VppTestCase):
self.pg_start()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
- self.pg3.local_ip4,
- dscp=vdscp.IP_API_DSCP_EF)
+ self.verify_orig_dhcp_request(
+ rx[0], self.pg3, hostname, self.pg3.local_ip4, dscp=vdscp.IP_API_DSCP_EF
+ )
#
# unicast the ack to the offered address
#
- p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'ack'),
- ('subnet_mask', "255.255.255.0"),
- ('router', self.pg3.remote_ip4),
- ('server_id', self.pg3.remote_ip4),
- ('lease_time', 43200),
- 'end']))
+ p_ack = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "ack"),
+ ("subnet_mask", "255.255.255.0"),
+ ("router", self.pg3.remote_ip4),
+ ("server_id", self.pg3.remote_ip4),
+ ("lease_time", 43200),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_ack)
self.pg_enable_capture(self.pg_interfaces)
@@ -1391,55 +1478,65 @@ class TestDHCP(VppTestCase):
#
# Configure DHCP client on PG3 and capture the discover sent
#
- Client.set_client(
- self.pg3.sw_if_index,
- hostname,
- set_broadcast_flag=False)
+ Client.set_client(self.pg3.sw_if_index, hostname, set_broadcast_flag=False)
Client.add_vpp_config()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
- broadcast=False)
+ self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname, broadcast=False)
#
# Send back on offer, unicasted to the offered address.
# Expect the request.
#
- p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'offer'),
- ('server_id', self.pg3.remote_ip4),
- 'end']))
+ p_offer = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("server_id", self.pg3.remote_ip4),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_offer)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
- self.pg3.local_ip4,
- broadcast=False)
+ self.verify_orig_dhcp_request(
+ rx[0], self.pg3, hostname, self.pg3.local_ip4, broadcast=False
+ )
#
# Send an acknowledgment, the lease renewal time is 2 seconds
# so we should expect the renew straight after
#
- p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'ack'),
- ('subnet_mask', "255.255.255.0"),
- ('router', self.pg3.remote_ip4),
- ('server_id', self.pg3.remote_ip4),
- ('lease_time', 43200),
- ('renewal_time', 2),
- 'end']))
+ p_ack = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "ack"),
+ ("subnet_mask", "255.255.255.0"),
+ ("router", self.pg3.remote_ip4),
+ ("server_id", self.pg3.remote_ip4),
+ ("lease_time", 43200),
+ ("renewal_time", 2),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_ack)
self.pg_enable_capture(self.pg_interfaces)
@@ -1465,19 +1562,15 @@ class TestDHCP(VppTestCase):
#
clients = self.vapi.dhcp_client_dump()
- self.assertEqual(clients[0].client.sw_if_index,
- self.pg3.sw_if_index)
- self.assertEqual(clients[0].lease.sw_if_index,
- self.pg3.sw_if_index)
+ self.assertEqual(clients[0].client.sw_if_index, self.pg3.sw_if_index)
+ self.assertEqual(clients[0].lease.sw_if_index, self.pg3.sw_if_index)
self.assertEqual(clients[0].client.hostname, hostname)
self.assertEqual(clients[0].lease.hostname, hostname)
# 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
self.assertEqual(clients[0].lease.state, 2)
self.assertEqual(clients[0].lease.mask_width, 24)
- self.assertEqual(str(clients[0].lease.router_address),
- self.pg3.remote_ip4)
- self.assertEqual(str(clients[0].lease.host_address),
- self.pg3.local_ip4)
+ self.assertEqual(str(clients[0].lease.router_address), self.pg3.remote_ip4)
+ self.assertEqual(str(clients[0].lease.host_address), self.pg3.local_ip4)
#
# wait for the unicasted renewal
@@ -1490,37 +1583,46 @@ class TestDHCP(VppTestCase):
self.assertEqual(rx[0][ARP].pdst, self.pg3.remote_ip4)
# respond to the arp
- p_arp = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- ARP(op="is-at",
- hwdst=self.pg3.local_mac,
- hwsrc=self.pg3.remote_mac,
- pdst=self.pg3.local_ip4,
- psrc=self.pg3.remote_ip4))
+ p_arp = Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) / ARP(
+ op="is-at",
+ hwdst=self.pg3.local_mac,
+ hwsrc=self.pg3.remote_mac,
+ pdst=self.pg3.local_ip4,
+ psrc=self.pg3.remote_ip4,
+ )
self.pg3.add_stream(p_arp)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
# the next packet is the unicasted renewal
rx = self.pg3.get_capture(1, timeout=10)
- self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
- self.pg3.local_ip4,
- l2_bc=False,
- broadcast=False)
+ self.verify_orig_dhcp_request(
+ rx[0], self.pg3, hostname, self.pg3.local_ip4, l2_bc=False, broadcast=False
+ )
# send an ACK with different data from the original offer *
self.pg3.generate_remote_hosts(4)
- p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.remote_hosts[3].ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'ack'),
- ('subnet_mask', "255.255.255.0"),
- ('router', self.pg3.remote_hosts[1].ip4),
- ('server_id', self.pg3.remote_hosts[2].ip4),
- ('lease_time', 43200),
- ('renewal_time', 2),
- 'end']))
+ p_ack = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1,
+ yiaddr=self.pg3.remote_hosts[3].ip4,
+ chaddr=mac_pton(self.pg3.local_mac),
+ )
+ / DHCP(
+ options=[
+ ("message-type", "ack"),
+ ("subnet_mask", "255.255.255.0"),
+ ("router", self.pg3.remote_hosts[1].ip4),
+ ("server_id", self.pg3.remote_hosts[2].ip4),
+ ("lease_time", 43200),
+ ("renewal_time", 2),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_ack)
self.pg_enable_capture(self.pg_interfaces)
@@ -1531,19 +1633,19 @@ class TestDHCP(VppTestCase):
#
clients = self.vapi.dhcp_client_dump()
- self.assertEqual(clients[0].client.sw_if_index,
- self.pg3.sw_if_index)
- self.assertEqual(clients[0].lease.sw_if_index,
- self.pg3.sw_if_index)
+ self.assertEqual(clients[0].client.sw_if_index, self.pg3.sw_if_index)
+ self.assertEqual(clients[0].lease.sw_if_index, self.pg3.sw_if_index)
self.assertEqual(clients[0].client.hostname, hostname)
self.assertEqual(clients[0].lease.hostname, hostname)
# 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
self.assertEqual(clients[0].lease.state, 2)
self.assertEqual(clients[0].lease.mask_width, 24)
- self.assertEqual(str(clients[0].lease.router_address),
- self.pg3.remote_hosts[1].ip4)
- self.assertEqual(str(clients[0].lease.host_address),
- self.pg3.remote_hosts[3].ip4)
+ self.assertEqual(
+ str(clients[0].lease.router_address), self.pg3.remote_hosts[1].ip4
+ )
+ self.assertEqual(
+ str(clients[0].lease.host_address), self.pg3.remote_hosts[3].ip4
+ )
#
# remove the DHCP config
@@ -1577,39 +1679,51 @@ class TestDHCP(VppTestCase):
# Send back on offer with requested lease time, expect the request
#
lease_time = 1
- p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1,
- yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'offer'),
- ('server_id', self.pg3.remote_ip4),
- ('lease_time', lease_time),
- 'end']))
+ p_offer = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "offer"),
+ ("server_id", self.pg3.remote_ip4),
+ ("lease_time", lease_time),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_offer)
self.pg_enable_capture(self.pg_interfaces)
self.pg_start()
rx = self.pg3.get_capture(1)
- self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
- self.pg3.local_ip4)
+ self.verify_orig_dhcp_request(rx[0], self.pg3, hostname, self.pg3.local_ip4)
#
# Send an acknowledgment
#
- p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
- IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
- UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
- BOOTP(op=1, yiaddr=self.pg3.local_ip4,
- chaddr=mac_pton(self.pg3.local_mac)) /
- DHCP(options=[('message-type', 'ack'),
- ('subnet_mask', '255.255.255.0'),
- ('router', self.pg3.remote_ip4),
- ('server_id', self.pg3.remote_ip4),
- ('lease_time', lease_time),
- 'end']))
+ p_ack = (
+ Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+ / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+ / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+ / BOOTP(
+ op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+ )
+ / DHCP(
+ options=[
+ ("message-type", "ack"),
+ ("subnet_mask", "255.255.255.0"),
+ ("router", self.pg3.remote_ip4),
+ ("server_id", self.pg3.remote_ip4),
+ ("lease_time", lease_time),
+ "end",
+ ]
+ )
+ )
self.pg3.add_stream(p_ack)
self.pg_enable_capture(self.pg_interfaces)
@@ -1641,11 +1755,11 @@ class TestDHCP(VppTestCase):
Client.remove_vpp_config()
def test_dhcp_client_vlan(self):
- """ DHCP Client w/ VLAN"""
+ """DHCP Client w/ VLAN"""
vdscp = VppEnum.vl_api_ip_dscp_t
vqos = VppEnum.vl_api_qos_source_t
- hostname = 'universal-dp'
+ hostname = "universal-dp"
self.pg_enable_capture(self.pg_interfaces)
@@ -1653,24 +1767,20 @@ class TestDHCP(VppTestCase):
vlan_100.admin_up()
output = [scapy.compat.chb(4)] * 256
- os = b''.join(output)
- rows = [{'outputs': os},
- {'outputs': os},
- {'outputs': os},
- {'outputs': os}]
+ os = b"".join(output)
+ rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
- qm1 = VppQosMark(self, vlan_100, qem1,
- vqos.QOS_API_SOURCE_VLAN).add_vpp_config()
+ qm1 = VppQosMark(
+ self, vlan_100, qem1, vqos.QOS_API_SOURCE_VLAN
+ ).add_vpp_config()
#
# Configure DHCP client on PG3 and capture the discover sent
#
Client = VppDHCPClient(
- self,
- vlan_100.sw_if_index,
- hostname,
- dscp=vdscp.IP_API_DSCP_EF)
+ self, vlan_100.sw_if_index, hostname, dscp=vdscp.IP_API_DSCP_EF
+ )
Client.add_vpp_config()
rx = self.pg3.get_capture(1)
@@ -1678,9 +1788,10 @@ class TestDHCP(VppTestCase):
self.assertEqual(rx[0][Dot1Q].vlan, 100)
self.assertEqual(rx[0][Dot1Q].prio, 2)
- self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
- dscp=vdscp.IP_API_DSCP_EF)
+ self.verify_orig_dhcp_discover(
+ rx[0], self.pg3, hostname, dscp=vdscp.IP_API_DSCP_EF
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main(testRunner=VppTestRunner)