X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FIPv4Setup.py;h=07089025b0fc2fc7cbc00d1c8c50d24405fd07ab;hb=refs%2Fchanges%2F17%2F3217%2F5;hp=d89eeed3d064ec0f07828192740d471b79926fde;hpb=cbd47fbe97945e9dc6584d08cd2266e3a7536a68;p=csit.git diff --git a/resources/libraries/python/IPv4Setup.py b/resources/libraries/python/IPv4Setup.py index d89eeed3d0..07089025b0 100644 --- a/resources/libraries/python/IPv4Setup.py +++ b/resources/libraries/python/IPv4Setup.py @@ -34,6 +34,15 @@ class IPv4Node(object): @staticmethod def _get_netmask(prefix_length): + """Convert IPv4 network prefix length into IPV4 network mask. + + :param prefix_length: Length of network prefix. + :type prefix_length: int + + :return: Network mask. + :rtype: str + """ + bits = 0xffffffff ^ (1 << 32 - prefix_length) - 1 return inet_ntoa(pack('>I', bits)) @@ -112,9 +121,25 @@ class Tg(IPv4Node): super(Tg, self).__init__(node_info) def _execute(self, cmd): + """Executes the specified command on TG using SSH. + + :param cmd: Command to be executed. + :type cmd: str + + :return: Content of stdout and stderr returned by command. + :rtype: tuple + """ return exec_cmd_no_error(self.node_info, cmd) def _sudo_execute(self, cmd): + """Executes the specified command with sudo on TG using SSH. + + :param cmd: Command to be executed. + :type cmd: str + + :return: Content of stdout and stderr returned by command. + :rtype: tuple + """ return exec_cmd_no_error(self.node_info, cmd, sudo=True) def set_ip(self, interface, address, prefix_length): @@ -135,6 +160,13 @@ class Tg(IPv4Node): format(network, prefix_length)) def arp_ping(self, destination_address, source_interface): + """Execute 'arping' command to send one ARP packet from the TG node. + + :param destination_address: Destination IP address for the ARP packet. + :param source_interface: Name of an interface to send ARP packet from. + :type destination_address: str + :type source_interface: str + """ self._sudo_execute('arping -c 1 -I {} {}'.format(source_interface, destination_address)) @@ -173,29 +205,33 @@ class Dut(IPv4Node): # TODO: check return value VatExecutor.cmd_from_template(self.node_info, script, **args) - def set_arp(self, iface_key, ip_address, mac_address): + def set_arp(self, iface_key, ip_address, mac_address, vrf=None): """Set entry in ARP cache. :param iface_key: Interface key. :param ip_address: IP address. :param mac_address: MAC address. + :param vrf: VRF table ID (Optional). :type iface_key: str :type ip_address: str :type mac_address: str + :type vrf: int """ + vrf = "vrf {}".format(vrf) if vrf else '' self.exec_vat('add_ip_neighbor.vat', sw_if_index=self.get_sw_if_index(iface_key), - ip_address=ip_address, mac_address=mac_address) + ip_address=ip_address, mac_address=mac_address, + vrf=vrf) def set_ip(self, interface, address, prefix_length): self.exec_vat('add_ip_address.vat', sw_if_index=self.get_sw_if_index(interface), address=address, prefix_length=prefix_length) - def set_route(self, network, prefix_length, gateway, interface): + def set_route(self, network, prefix_length, gateway, interface, count=1): Routing.vpp_route_add(self.node_info, network=network, prefix_len=prefix_length, - gateway=gateway, interface=interface) + gateway=gateway, interface=interface, count=count) def unset_route(self, network, prefix_length, gateway, interface): self.exec_vat('del_route.vat', network=network, @@ -203,6 +239,7 @@ class Dut(IPv4Node): sw_if_index=self.get_sw_if_index(interface)) def arp_ping(self, destination_address, source_interface): + """Does nothing.""" pass def flush_ip_addresses(self, interface): @@ -282,9 +319,9 @@ class IPv4Setup(object): host = port.get('node') dev = port.get('if') if host == node['host'] and dev == interface: - ip = port.get('addr') - if ip is not None: - return ip + ip_addr = port.get('addr') + if ip_addr is not None: + return ip_addr else: raise Exception( 'Node {n} port {p} IPv4 address is not set'.format( @@ -316,16 +353,18 @@ class IPv4Setup(object): get_node(node).set_arp(iface_key, ip_address, mac_address) @staticmethod - def add_arp_on_dut(node, iface_key, ip_address, mac_address): + def add_arp_on_dut(node, iface_key, ip_address, mac_address, vrf=None): """Set ARP cache entree on DUT node. :param node: VPP Node in the topology. :param iface_key: Interface key. :param ip_address: IP address of the interface. :param mac_address: MAC address of the interface. + :param vrf: VRF table ID (Optional). :type node: dict :type iface_key: str :type ip_address: str :type mac_address: str + :type vrf: int """ - get_node(node).set_arp(iface_key, ip_address, mac_address) + get_node(node).set_arp(iface_key, ip_address, mac_address, vrf)