-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
"""DHCP utilities for VPP."""
-from resources.libraries.python.VatExecutor import VatExecutor
-from resources.libraries.python.topology import Topology
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-class DhcpClient(object):
- """DHCP Client utilities."""
+class DhcpProxy:
+ """DHCP Proxy utilities."""
@staticmethod
- def set_dhcp_client_on_interface(vpp_node, interface, hostname=None):
- """Set DHCP client on interface.
-
- :param vpp_node: VPP node to set DHCP client on.
- :param interface: Interface name to set DHCP client on.
- :param hostname: Hostname used in DHCP DISCOVER.
- :type vpp_node: dict
- :type interface: str
- :type hostname: str
- :raises RuntimeError: If unable to set DHCP client on interface.
+ def vpp_get_dhcp_proxy(node, ip_version):
+ """Retrieve DHCP relay configuration.
+
+ :param node: VPP node.
+ :param ip_version: IP protocol version: ipv4 or ipv6.
+ :type node: dict
+ :type ip_version: str
+ :returns: DHCP relay data.
+ :rtype: list
"""
- sw_if_index = Topology.get_interface_sw_index(vpp_node, interface)
- interface = 'sw_if_index {}'.format(sw_if_index)
- hostname = 'hostname {}'.format(hostname) if hostname else ''
- output = VatExecutor.cmd_from_template(vpp_node,
- "dhcp_client.vat",
- interface=interface,
- hostname=hostname)
- output = output[0]
-
- if output["retval"] != 0:
- raise RuntimeError('Unable to set DHCP client on node {} and'
- ' interface {}.'
- .format(vpp_node, interface))
+ cmd = u"dhcp_proxy_dump"
+ args = dict(is_ip6=1 if ip_version == u"ipv6" else 0)
+ err_msg = f"Failed to get DHCP proxy dump on host {node[u'host']}"
+
+ with PapiSocketExecutor(node) as papi_exec:
+ details = papi_exec.add(cmd, **args).get_details(err_msg)
+
+ return details