diff options
Diffstat (limited to 'resources/libraries/python/L2Util.py')
-rw-r--r-- | resources/libraries/python/L2Util.py | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/resources/libraries/python/L2Util.py b/resources/libraries/python/L2Util.py new file mode 100644 index 0000000000..8581b1e879 --- /dev/null +++ b/resources/libraries/python/L2Util.py @@ -0,0 +1,119 @@ +# Copyright (c) 2016 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: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""L2 bridge domain utilities Library.""" + +from robot.api.deco import keyword +from resources.libraries.python.topology import Topology +from resources.libraries.python.VatExecutor import VatExecutor + + +class L2Util(object): + """Utilities for l2 bridge domain configuration""" + + def __init__(self): + pass + + @staticmethod + @keyword('Setup static L2FIB entry on node "${node}" for MAC "${dst_mac}"' + ' link "${link}" pair on bd_index "${bd_id}"') + def static_l2_fib_entry_via_links(node, dst_mac, link, bd_id): + """ Creates a static fib entry on a vpp node + + :param node: node where we wish to add the static fib entry + :param dst_mac: destination mac address in the entry + :param link: link name of the node destination interface + :param bd_id: l2 bridge domain id + :type node: dict + :type dst_mac: str + :type link: str + :type bd_id: str + """ + topology = Topology() + interface_name = topology.get_interface_by_link_name(node, link) + sw_if_index = topology.get_interface_sw_index(node, interface_name) + VatExecutor.cmd_from_template(node, "add_l2_fib_entry.vat", + mac=dst_mac, bd=bd_id, + interface=sw_if_index) + + @staticmethod + @keyword('Setup l2 bridge domain with id "${bd_id}" flooding "${flood}" ' + 'forwarding "${forward}" learning "${learn}" and arp termination ' + '"${arp_term}" on vpp node "${node}"') + def setup_vpp_l2_bridge_domain(node, bd_id, flood, forward, learn, + arp_term): + """Create a l2 bridge domain on the chosen vpp node + + Executes "bridge_domain_add_del bd_id {bd_id} flood {flood} uu-flood 1 + forward {forward} learn {learn} arp-term {arp_term}" VAT command on + the node. + For the moment acts as a placeholder + :param node: node where we wish to crate the l2 bridge domain + :param bd_id: bridge domain id + :param flood: enable flooding + :param forward: enable forwarding + :param learn: enable mac address learning to fib + :param arp_term: enable arp_termination + :type node: str + :type bd_id: str + :type flood: bool + :type forward: bool + :type learn: bool + :type arp_term:bool + :return: + """ + pass + + @keyword('Add interface "${interface}" to l2 bridge domain with index ' + '"${bd_id}" and shg "${shg}" on vpp node "${node}"') + def add_interface_to_l2_bd(self, node, interface, bd_id, shg): + """Adds interface to l2 bridge domain. + + Executes the "sw_interface_set_l2_bridge {interface1} bd_id {bd_id} + shg {shg} enable" VAT command on the given node. + For the moment acts as a placeholder + :param node: node where we want to execute the command that does this. + :param interface: + :param bd_id: + :param shg: + :type node: dict + :type interface: str + :type bd_id: str + :type shg: str + :return: + """ + pass + + @staticmethod + @keyword('Create dict used in bridge domain template file for node ' + '"${node}" with links "${link_names}" and bd_id "${bd_id}"') + def create_bridge_domain_vat_dict(node, link_names, bd_id): + """Creates dictionary that can be used in l2 bridge domain template. + + :param node: node data dictionary + :param link_names: list of names of links the bridge domain should be + connecting + :param bd_id: bridge domain index number + :type node: dict + :type link_names: list + :return: dictionary used to generate l2 bridge domain VAT configuration + from template file + The resulting dictionary looks like this: + 'interface1': interface name of first interface + 'interface2': interface name of second interface + 'bd_id': bridge domian index + """ + bd_dict = Topology().get_interfaces_by_link_names(node, link_names) + bd_dict['bd_id'] = bd_id + return bd_dict + |