-# 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:
"""Library to set up IPv6 in topology."""
-from robot.api import logger
from ipaddress import IPv6Network
+from robot.api import logger
from resources.libraries.python.ssh import SSH
from resources.libraries.python.topology import NodeType, Topology
class IPv6Networks(object):
"""IPv6 network iterator.
- :param networks: List of the available IPv6 networks.
- :type networks: list
+ TODO: Conform to https://docs.python.org/2/library/stdtypes.html#typeiter
"""
+
def __init__(self, networks):
- self._networks = list()
+ """Initialize internal list of valid networks.
+
+ :param networks: List of the available IPv6 networks.
+ :type networks: list
+ :raise RuntimeError: If no networks were added.
+ """
+ self._networks = []
for network in networks:
net = IPv6Network(unicode(network))
self._networks.append(net)
- num = len(self._networks)
- if num == 0:
- raise Exception('No IPv6 networks')
+ if not self._networks:
+ raise RuntimeError('No IPv6 networks')
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):
+ if self._networks:
return self._networks.pop()
else:
raise StopIteration()
:type interface: str
"""
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')
+ if sw_if_index:
+ VatExecutor.cmd_from_template(node,
+ 'sw_interface_ip6nd_ra_config.vat',
+ sw_if_id=sw_if_index,
+ param='surpress')
@staticmethod
def vpp_ra_send_after_interval(node, interface, interval=2):
: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='interval {0}'.format(interval))
+ if sw_if_index:
+ VatExecutor.cmd_from_template(node,
+ 'sw_interface_ip6nd_ra_config.vat',
+ sw_if_id=sw_if_index,
+ param='interval {0}'.format(interval))
def vpp_all_ra_suppress_link_layer(self, nodes):
"""Suppress ICMPv6 router advertisement message for link scope address