from topology import NodeType
from topology import Topology
from constants import Constants
+from robot.api import logger
class IPv6Networks(object):
raise Exception('VPP sw_interface_set_flags failed on {h}'.format(
h=node['host']))
+ cmd_input = 'exec show int'
+ (ret_code, stdout, stderr) = ssh.exec_command_sudo(cmd, cmd_input)
+ logger.debug('ret: {0}'.format(ret_code))
+ logger.debug('stdout: {0}'.format(stdout))
+ logger.debug('stderr: {0}'.format(stderr))
+
@staticmethod
def vpp_del_if_ipv6_addr(node, interface, addr, prefix):
"""Delete IPv6 address on VPP.
self.vpp_ra_supress_link_layer(node, if_name)
@staticmethod
- def vpp_ipv6_route_add(node, link, interface, nodes_addr):
- """Setup IPv6 route on the VPP node.
-
- :param node: Node to add route on.
- :param link: Route to following link.
- :param interface: Route output interface.
- :param nodes_addr: Available nodes IPv6 adresses.
- :type node: dict
- :type link: str
- :type interface: str
- :type nodes_addr: dict
+ def get_link_address(link, nodes_addr):
+ """Get link IPv6 address.
+
+ :param link: Link name.
+ :param nodes_addr: Available nodes IPv6 adresses.
+ :type link: str
+ :type nodes_addr: dict
+ :return: Link IPv6 address.
+ :rtype: str
"""
- ssh = SSH()
- ssh.connect(node)
-
- # Get route destination address from link name
net = nodes_addr.get(link)
if net is None:
- raise ValueError('No network for link "{0}"'.format(link))
- dst_net = '{0}/{1}'.format(net['net_addr'], net['prefix'])
+ raise ValueError('Link "{0}" address not found'.format(link))
+ return net.get('net_addr')
- # Get next-hop address
- nh_addr = None
- for net in nodes_addr.values():
- for port in net['ports'].values():
- if port['if'] == interface and port['node'] == node['host']:
- for nh in net['ports'].values():
- if nh['if'] != interface and nh['node'] != node['host']:
- nh_addr = nh['addr']
- if nh_addr is None:
- raise Exception('next-hop not found')
-
- cmd_input = 'ip_add_del_route {0} via {1} {2} resolve-attempts 10'. \
- format(dst_net, nh_addr, interface)
- (ret_code, _, _) = ssh.exec_command_sudo(Constants.VAT_BIN_NAME,
- cmd_input)
- if int(ret_code) != 0:
- raise Exception("'{0}' failed on {1}".format(cmd_input,
- node['host']))
+ @staticmethod
+ def get_link_prefix(link, nodes_addr):
+ """Get link IPv6 address prefix.
+
+ :param link: Link name.
+ :param nodes_addr: Available nodes IPv6 adresses.
+ :type link: str
+ :type nodes_addr: dict
+ :return: Link IPv6 address prefix.
+ :rtype: int
+ """
+ net = nodes_addr.get(link)
+ if net is None:
+ raise ValueError('Link "{0}" address not found'.format(link))
+ return net.get('prefix')