aboutsummaryrefslogtreecommitdiffstats
path: root/resources/test_data/softwire/map_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/test_data/softwire/map_utils.py')
-rw-r--r--resources/test_data/softwire/map_utils.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/resources/test_data/softwire/map_utils.py b/resources/test_data/softwire/map_utils.py
new file mode 100644
index 0000000000..58ef551d7a
--- /dev/null
+++ b/resources/test_data/softwire/map_utils.py
@@ -0,0 +1,53 @@
+# 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.
+
+"""Utils for MAP feature."""
+
+
+def map_port_ranges(psid, length, offset=6):
+ """Return list of port ranges for given PSID in tuple <min, max>.
+
+ :param psid: PSID.
+ :param length: PSID length.
+ :param offset: PSID offset.
+ :type psid: int
+ :type length: int
+ :type offset: int
+ :return: List of (min, max) port range tuples inclusive.
+ :rtype: list
+
+ 0 1
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ +-----------+-----------+-------+
+ Ports in | A | PSID | j |
+ the CE port set | > 0 | | |
+ +-----------+-----------+-------+
+ | a bits | k bits |m bits |
+ """
+
+ port_field_len = 16
+ port_field_min = int('0x0000', 16)
+ port_field_max = int('0xffff', 16)
+
+ a = offset
+ k = length
+ m = port_field_len - offset - length
+ km = k + m
+ j_max = port_field_max >> a + k
+
+ port_ranges = []
+ for A in range(1, (port_field_max >> km) + 1):
+ port_ranges.append((((A << k) | psid) << m,
+ ((A << k) | psid) << m | j_max))
+
+ return port_ranges