diff options
Diffstat (limited to 'resources/libraries/python/Map.py')
-rw-r--r-- | resources/libraries/python/Map.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/resources/libraries/python/Map.py b/resources/libraries/python/Map.py new file mode 100644 index 0000000000..7d48c20d2e --- /dev/null +++ b/resources/libraries/python/Map.py @@ -0,0 +1,83 @@ +# 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. + +"""Map utilities library.""" + + +from resources.libraries.python.VatExecutor import VatExecutor + + +class Map(object): + """Utilities for manipulating MAP feature in VPP.""" + + @staticmethod + def map_add_domain(vpp_node, ip4_pfx, ip6_pfx, ip6_src, ea_bits_len, + psid_offset, psid_len): + """Add map domain on node. + + :param vpp_node: VPP node to add map domain on. + :param ip4_pfx: Rule IPv4 prefix. + :param ip6_pfx: Rule IPv6 prefix. + :param ip6_src: MAP domain IPv6 BR address / Tunnel source. + :param ea_bits_len: Embedded Address bits length. + :param psid_offset: Port Set Identifier (PSID) offset. + :param psid_len: Port Set Identifier (PSID) length. + :type vpp_node: dict + :type ip4_pfx: str + :type ip6_pfx: str + :type ip6_src: str + :type ea_bits_len: int + :type psid_offset: int + :type psid_len: int + :return: Index of created map domain. + :rtype: int + :raises RuntimeError: If unable to add map domain. + """ + output = VatExecutor.cmd_from_template(vpp_node, "map_add_domain.vat", + ip4_pfx=ip4_pfx, + ip6_pfx=ip6_pfx, + ip6_src=ip6_src, + ea_bits_len=ea_bits_len, + psid_offset=psid_offset, + psid_len=psid_len) + if output[0]["retval"] == 0: + return output[0]["index"] + else: + raise RuntimeError('Unable to add map domain on node {}' + .format(vpp_node['host'])) + + @staticmethod + def map_add_rule(vpp_node, index, psid, dst, delete=False): + """Add or delete map rule on node. + + :param vpp_node: VPP node to add map rule on. + :param index: Map domain index to add rule to. + :param psid: Port Set Identifier. + :param dst: MAP CE IPv6 address. + :param delete: If set to True, delete rule. Default False. + :type vpp_node: dict + :type index: int + :type psid: int + :type dst: str + :type delete: bool + :raises RuntimeError: If unable to add map rule. + """ + output = VatExecutor.cmd_from_template(vpp_node, "map_add_del_rule.vat", + index=index, + psid=psid, + dst=dst, + delete='del' if delete else '') + + if output[0]["retval"] != 0: + raise RuntimeError('Unable to add map rule on node {}' + .format(vpp_node['host'])) |