CSIT-395 Update TRex version to v2.09
[csit.git] / resources / libraries / python / Dhcp.py
1 # Copyright (c) 2016 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 """DHCP utilities for VPP."""
15
16
17 from resources.libraries.python.VatExecutor import VatExecutor
18 from resources.libraries.python.topology import Topology
19
20
21 class DhcpClient(object):
22     """DHCP Client utilities."""
23
24     @staticmethod
25     def set_dhcp_client_on_interface(vpp_node, interface, hostname=None):
26         """Set DHCP client on interface.
27
28         :param vpp_node: VPP node to set DHCP client on.
29         :param interface: Interface name to set DHCP client on.
30         :param hostname: Hostname used in DHCP DISCOVER.
31         :type vpp_node: dict
32         :type interface: str
33         :type hostname: str
34         :raises RuntimeError: If unable to set DHCP client on interface.
35         """
36         sw_if_index = Topology.get_interface_sw_index(vpp_node, interface)
37         interface = 'sw_if_index {}'.format(sw_if_index)
38         hostname = 'hostname {}'.format(hostname) if hostname else ''
39         output = VatExecutor.cmd_from_template(vpp_node,
40                                                "dhcp_client.vat",
41                                                interface=interface,
42                                                hostname=hostname)
43         output = output[0]
44
45         if output["retval"] != 0:
46             raise RuntimeError('Unable to set DHCP client on node {} and'
47                                ' interface {}.'
48                                .format(vpp_node, interface))
49
50
51 class DhcpProxy(object):
52     """DHCP Proxy utilities."""
53
54     @staticmethod
55     def dhcp_proxy_config(vpp_node, server_address, source_address):
56         """Set DHCP proxy.
57
58         :param vpp_node: VPP node to set DHCP proxy.
59         :param server_address: DHCP server IP address.
60         :param source_address: DHCP proxy address.
61         :type vpp_node: dict
62         :type server_address: str
63         :type source_address: str
64         :raises RuntimeError: If unable to set DHCP proxy.
65         """
66
67         output = VatExecutor.cmd_from_template(vpp_node,
68                                                "dhcp_proxy_config.vat",
69                                                server_address=server_address,
70                                                source_address=source_address)
71         output = output[0]
72
73         if output["retval"] != 0:
74             raise RuntimeError('Unable to set DHCP proxy on node {}'
75                                .format(vpp_node))