diff options
Diffstat (limited to 'resources/libraries/python/NAT.py')
-rw-r--r-- | resources/libraries/python/NAT.py | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/resources/libraries/python/NAT.py b/resources/libraries/python/NAT.py new file mode 100644 index 0000000000..d0e01c7f84 --- /dev/null +++ b/resources/libraries/python/NAT.py @@ -0,0 +1,107 @@ +# 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. + +"""NAT utilities library.""" + +from resources.libraries.python.VatExecutor import VatExecutor + + +class NATUtil(object): + """NAT utilities.""" + + def __init__(self): + pass + + @staticmethod + def vpp_get_nat_static_mappings(node): + """Get NAT static mappings from VPP node. + + :param node: VPP node. + :type node: dict + :returns: List of static mappings. + :rtype: list + :raises RuntimeError: If the output is not as expected. + """ + + vat = VatExecutor() + # JSON output not supported for this command + vat.execute_script('snat/snat_mapping_dump.vat', node, json_out=False) + + stdout = vat.get_script_stdout() + lines = stdout.split("\n") + + data = [] + # lines[0,1] are table and column headers + for line in lines[2::]: + items = line.split(" ") + while "" in items: + items.remove("") + if len(items) == 0: + continue + elif len(items) == 3: + # no ports were returned + data.append({ + "local_address": items[0], + "remote_address": items[1], + "vrf": items[2] + }) + elif len(items) == 5: + data.append({ + "local_address": items[0], + "local_port": items[1], + "remote_address": items[2], + "remote_port": items[3], + "vrf": items[4] + }) + else: + raise RuntimeError("Unexpected output from span_mapping_dump.") + + return data + + @staticmethod + def vpp_get_nat_interfaces(node): + """Get list of interfaces configured with NAT from VPP node. + + :param node: VPP node. + :type node: dict + :returns: List of interfaces on the node that are configured with NAT. + :rtype: list + :raises RuntimeError: If the output is not as expected. + """ + + vat = VatExecutor() + # JSON output not supported for this command + vat.execute_script('snat/snat_interface_dump.vat', node, + json_out=False) + + stdout = vat.get_script_stdout() + lines = stdout.split("\n") + + data = [] + for line in lines: + items = line.split(" ") + while "" in items: + items.remove("") + if len(items) == 0: + continue + elif len(items) == 3: + data.append({ + # items[0] is the table header - "sw_if_index" + "sw_if_index": items[1], + "direction": items[2] + }) + else: + raise RuntimeError( + "Unexpected output from span_interface_dump.") + + return data |