-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2018 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:
def next_network(self):
"""Get the next element of the iterator.
- :return: IPv6 network.
+ :returns: IPv6 network.
:rtype: IPv6Network object
- :raises: StopIteration if there is no more elements.
+ :raises StopIteration: If there is no more elements.
"""
if len(self._networks):
return self._networks.pop()
:param nodes_addr: Available nodes IPv6 addresses.
:type nodes: dict
:type nodes_addr: dict
- :return: Affected interfaces as list of (node, interface) tuples.
+ :returns: Affected interfaces as list of (node, interface) tuples.
:rtype: list
"""
interfaces = []
if node is None:
continue
if node['type'] == NodeType.DUT:
- self.vpp_set_if_ipv6_addr(node, port['if'], port['addr'],
+ port_key = topo.get_interface_by_name(node, port['if'])
+ self.vpp_set_if_ipv6_addr(node, port_key, port['addr'],
net['prefix'])
interfaces.append((node, port['if']))
raise Exception('TG ifconfig failed')
@staticmethod
- def vpp_set_if_ipv6_addr(node, interface, addr, prefix):
+ def vpp_set_if_ipv6_addr(node, iface_key, addr, prefix):
"""Set IPv6 address on VPP.
:param node: VPP node.
- :param interface: Node interface.
+ :param iface_key: Node interface key.
:param addr: IPv6 address.
:param prefix: IPv6 address prefix.
:type node: dict
- :type interface: str
+ :type iface_key: str
:type addr: str
:type prefix: str
"""
- sw_if_index = Topology.get_interface_sw_index(node, interface)
+ sw_if_index = Topology.get_interface_sw_index(node, iface_key)
with VatTerminal(node) as vat:
vat.vat_terminal_exec_cmd_from_template('add_ip_address.vat',
sw_if_index=sw_if_index,
sw_if_index=sw_if_index,
state='admin-down')
-
@staticmethod
- def vpp_set_ipv6_neighbor(node, interface, ipaddr, macaddr):
- """Set IPv6 neighbor.
-
- :param node: VPP node.
- :param interface: Interface name.
- :param ip_address: IPv6 address.
- :param mac_address: mac address.
- :type node: dict
- :type interface: str
- :type ip_address: str
- :type mac_address: str
+ def vpp_ra_suppress_link_layer(node, interface):
+ """Suppress ICMPv6 router advertisement message for link scope address.
+
+ :param node: VPP node.
+ :param interface: Interface name.
+ :type node: dict
+ :type interface: str
"""
sw_if_index = Topology.get_interface_sw_index(node, interface)
VatExecutor.cmd_from_template(node,
- 'add_ip_neighbor.vat',
- sw_if_index=sw_if_index,
- ip_address=ipaddr,
- mac_address=macaddr)
+ 'sw_interface_ip6nd_ra_config.vat',
+ sw_if_id=sw_if_index,
+ param='surpress')
@staticmethod
- def vpp_ra_suppress_link_layer(node, interface):
- """Suppress ICMPv6 router advertisement message for link scope address.
+ def vpp_ra_send_after_interval(node, interface, interval=2):
+ """Setup vpp router advertisement(RA) in such way it sends RA packet
+ after and every interval value.
:param node: VPP node.
:param interface: Interface name.
+ :param interval: Interval for RA resend
:type node: dict
:type interface: str
+ :type interval: int
"""
sw_if_index = Topology.get_interface_sw_index(node, interface)
VatExecutor.cmd_from_template(node,
'sw_interface_ip6nd_ra_config.vat',
sw_if_id=sw_if_index,
- param='surpress')
+ param='interval {0}'.format(interval))
def vpp_all_ra_suppress_link_layer(self, nodes):
"""Suppress ICMPv6 router advertisement message for link scope address
for node in nodes.values():
if node['type'] == NodeType.TG:
continue
- for port_k, port_v in node['interfaces'].items():
- if_name = port_v.get('name')
- if if_name is None:
- continue
- self.vpp_ra_suppress_link_layer(node, if_name)
+ for port_k in node['interfaces'].keys():
+ self.vpp_ra_suppress_link_layer(node, port_k)
@staticmethod
def get_link_address(link, nodes_addr):
:param nodes_addr: Available nodes IPv6 addresses.
:type link: str
:type nodes_addr: dict
- :return: Link IPv6 address.
+ :returns: Link IPv6 address.
:rtype: str
"""
net = nodes_addr.get(link)
:param nodes_addr: Available nodes IPv6 addresses.
:type link: str
:type nodes_addr: dict
- :return: Link IPv6 address prefix.
+ :returns: Link IPv6 address prefix.
:rtype: int
"""
net = nodes_addr.get(link)