-# Copyright (c) 2017 Cisco and/or its affiliates.
+# Copyright (c) 2019 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."""
-
- @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.
- """
- 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))
-
-
-class DhcpProxy(object):
+class DhcpProxy:
"""DHCP Proxy utilities."""
- @staticmethod
- def dhcp_proxy_config(vpp_node, server_address, source_address):
- """Set DHCP proxy.
-
- :param vpp_node: VPP node to set DHCP proxy.
- :param server_address: DHCP server IP address.
- :param source_address: DHCP proxy address.
- :type vpp_node: dict
- :type server_address: str
- :type source_address: str
- :raises RuntimeError: If unable to set DHCP proxy.
- """
-
- output = VatExecutor.cmd_from_template(vpp_node,
- "dhcp_proxy_config.vat",
- server_address=server_address,
- source_address=source_address)
- output = output[0]
-
- if output["retval"] != 0:
- raise RuntimeError('Unable to set DHCP proxy on node {}'
- .format(vpp_node))
-
@staticmethod
def vpp_get_dhcp_proxy(node, ip_version):
"""Retrieve DHCP relay configuration.
:returns: DHCP relay data.
:rtype: list
"""
+ 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 VatExecutor.cmd_from_template(
- node, "dhcp_proxy_dump.vat",
- ipv6="ipv6" if ip_version == "ipv6" else "")
+ return details