2019-10-01 11:30:56 +02:00
|
|
|
from vpp_object import VppObject
|
|
|
|
|
|
|
|
|
|
|
|
class VppDHCPProxy(VppObject):
|
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
test,
|
|
|
|
dhcp_server,
|
|
|
|
dhcp_src_address,
|
|
|
|
rx_vrf_id=0,
|
|
|
|
server_vrf_id=0,
|
|
|
|
):
|
|
|
|
self._test = test
|
|
|
|
self._rx_vrf_id = rx_vrf_id
|
|
|
|
self._server_vrf_id = server_vrf_id
|
|
|
|
self._dhcp_server = dhcp_server
|
|
|
|
self._dhcp_src_address = dhcp_src_address
|
|
|
|
|
2022-04-26 19:02:15 +02:00
|
|
|
def set_proxy(self, dhcp_server, dhcp_src_address, rx_vrf_id=0, server_vrf_id=0):
|
2019-10-01 11:30:56 +02:00
|
|
|
if self.query_vpp_config():
|
2022-04-26 19:02:15 +02:00
|
|
|
raise Exception("Vpp config present")
|
2019-10-01 11:30:56 +02:00
|
|
|
self._rx_vrf_id = rx_vrf_id
|
|
|
|
self._server_vrf_id = server_vrf_id
|
|
|
|
self._dhcp_server = dhcp_server
|
|
|
|
self._dhcp_src_address = dhcp_src_address
|
|
|
|
|
|
|
|
def add_vpp_config(self):
|
|
|
|
self._test.vapi.dhcp_proxy_config(
|
2019-10-07 00:39:28 -07:00
|
|
|
is_add=1,
|
2019-10-01 11:30:56 +02:00
|
|
|
rx_vrf_id=self._rx_vrf_id,
|
|
|
|
server_vrf_id=self._server_vrf_id,
|
|
|
|
dhcp_server=self._dhcp_server,
|
2022-04-26 19:02:15 +02:00
|
|
|
dhcp_src_address=self._dhcp_src_address,
|
|
|
|
)
|
2019-10-01 11:30:56 +02:00
|
|
|
self._test.registry.register(self, self._test.logger)
|
|
|
|
|
|
|
|
def remove_vpp_config(self):
|
|
|
|
self._test.vapi.dhcp_proxy_config(
|
|
|
|
rx_vrf_id=self._rx_vrf_id,
|
|
|
|
server_vrf_id=self._server_vrf_id,
|
|
|
|
dhcp_server=self._dhcp_server,
|
|
|
|
dhcp_src_address=self._dhcp_src_address,
|
2022-04-26 19:02:15 +02:00
|
|
|
is_add=0,
|
|
|
|
)
|
2019-10-01 11:30:56 +02:00
|
|
|
|
|
|
|
def get_vpp_dump(self):
|
|
|
|
dump = self._test.vapi.dhcp_proxy_dump()
|
|
|
|
for entry in dump:
|
|
|
|
if entry.rx_vrf_id == self._rx_vrf_id:
|
|
|
|
return entry
|
|
|
|
|
|
|
|
def query_vpp_config(self):
|
|
|
|
dump = self.get_vpp_dump()
|
|
|
|
return True if dump else False
|
|
|
|
|
|
|
|
def object_id(self):
|
|
|
|
return "dhcp-proxy-%d" % self._rx_vrf_id
|
|
|
|
|
|
|
|
|
|
|
|
class VppDHCPClient(VppObject):
|
|
|
|
def __init__(
|
2022-04-26 19:02:15 +02:00
|
|
|
self,
|
|
|
|
test,
|
|
|
|
sw_if_index,
|
|
|
|
hostname,
|
|
|
|
id=None,
|
|
|
|
want_dhcp_event=False,
|
|
|
|
set_broadcast_flag=True,
|
|
|
|
dscp=None,
|
|
|
|
pid=None,
|
|
|
|
):
|
2019-10-01 11:30:56 +02:00
|
|
|
self._test = test
|
|
|
|
self._sw_if_index = sw_if_index
|
|
|
|
self._hostname = hostname
|
|
|
|
self._id = id
|
|
|
|
self._want_dhcp_event = want_dhcp_event
|
|
|
|
self._set_broadcast_flag = set_broadcast_flag
|
|
|
|
self._dscp = dscp
|
|
|
|
self._pid = pid
|
|
|
|
|
|
|
|
def set_client(
|
2022-04-26 19:02:15 +02:00
|
|
|
self,
|
|
|
|
sw_if_index,
|
|
|
|
hostname,
|
|
|
|
id=None,
|
|
|
|
want_dhcp_event=False,
|
|
|
|
set_broadcast_flag=True,
|
|
|
|
dscp=None,
|
|
|
|
pid=None,
|
|
|
|
):
|
2019-10-01 11:30:56 +02:00
|
|
|
if self.query_vpp_config():
|
2022-04-26 19:02:15 +02:00
|
|
|
raise Exception("Vpp config present")
|
2019-10-01 11:30:56 +02:00
|
|
|
self._sw_if_index = sw_if_index
|
|
|
|
self._hostname = hostname
|
|
|
|
self._id = id
|
|
|
|
self._want_dhcp_event = want_dhcp_event
|
|
|
|
self._set_broadcast_flag = set_broadcast_flag
|
|
|
|
self._dscp = dscp
|
|
|
|
self._pid = pid
|
|
|
|
|
|
|
|
def add_vpp_config(self):
|
2022-04-26 19:02:15 +02:00
|
|
|
id = self._id.encode("ascii") if self._id else None
|
|
|
|
client = {
|
|
|
|
"sw_if_index": self._sw_if_index,
|
|
|
|
"hostname": self._hostname,
|
|
|
|
"id": id,
|
|
|
|
"want_dhcp_event": self._want_dhcp_event,
|
|
|
|
"set_broadcast_flag": self._set_broadcast_flag,
|
|
|
|
"dscp": self._dscp,
|
|
|
|
"pid": self._pid,
|
|
|
|
}
|
2019-10-07 00:39:28 -07:00
|
|
|
self._test.vapi.dhcp_client_config(is_add=1, client=client)
|
2019-10-01 11:30:56 +02:00
|
|
|
self._test.registry.register(self, self._test.logger)
|
|
|
|
|
|
|
|
def remove_vpp_config(self):
|
2022-04-26 19:02:15 +02:00
|
|
|
client = client = {"sw_if_index": self._sw_if_index, "hostname": self._hostname}
|
2019-10-01 11:30:56 +02:00
|
|
|
self._test.vapi.dhcp_client_config(client=client, is_add=0)
|
|
|
|
|
|
|
|
def get_vpp_dump(self):
|
|
|
|
dump = self._test.vapi.dhcp_client_dump()
|
|
|
|
for entry in dump:
|
|
|
|
if entry.client.sw_if_index == self._sw_if_index:
|
|
|
|
return entry
|
|
|
|
|
|
|
|
def query_vpp_config(self):
|
|
|
|
dump = self.get_vpp_dump()
|
|
|
|
return True if dump else False
|
|
|
|
|
|
|
|
def object_id(self):
|
|
|
|
return "dhcp-client-%s/%d" % (self._hostname, self._sw_if_index)
|