aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/L2Util.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/python/L2Util.py')
-rw-r--r--resources/libraries/python/L2Util.py119
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
+