Skip to content

Commit 0d8a43e

Browse files
judyjosephsanthosh-kt
authored andcommittedFeb 25, 2021
[sonic-py-common] Relocate some functions from sonic-utilities (sonic-net#5269)
* Relocate interface related common functions to py-common * Add unit tests for interface API's.
1 parent eb8b1a0 commit 0d8a43e

File tree

3 files changed

+95
-0
lines changed

3 files changed

+95
-0
lines changed
 

‎src/sonic-py-common/sonic_py_common/interface.py

+42
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
"""
2+
SONiC interface types and access functions.
3+
"""
4+
15
"""
26
Dictionary of SONIC interface name prefixes. Each entry in the format
37
"Human readable interface string":"Sonic interface prefix"
@@ -12,6 +16,8 @@
1216
"Ethernet-Backplane": "Ethernet-BP"
1317
}
1418

19+
VLAN_SUB_INTERFACE_SEPARATOR = '.'
20+
1521
def front_panel_prefix():
1622
"""
1723
Retrieves the SONIC front panel interface name prefix.
@@ -41,3 +47,39 @@ def loopback_prefix():
4147
Retrieves the SONIC Loopback interface name prefix.
4248
"""
4349
return SONIC_INTERFACE_PREFIXES["Loopback"]
50+
51+
def get_interface_table_name(interface_name):
52+
"""Get table name by interface_name prefix
53+
"""
54+
if interface_name.startswith(front_panel_prefix()):
55+
if VLAN_SUB_INTERFACE_SEPARATOR in interface_name:
56+
return "VLAN_SUB_INTERFACE"
57+
return "INTERFACE"
58+
elif interface_name.startswith(portchannel_prefix()):
59+
if VLAN_SUB_INTERFACE_SEPARATOR in interface_name:
60+
return "VLAN_SUB_INTERFACE"
61+
return "PORTCHANNEL_INTERFACE"
62+
elif interface_name.startswith(vlan_prefix()):
63+
return "VLAN_INTERFACE"
64+
elif interface_name.startswith(loopback_prefix()):
65+
return "LOOPBACK_INTERFACE"
66+
else:
67+
return ""
68+
69+
def get_port_table_name(interface_name):
70+
"""Get table name by port_name prefix
71+
"""
72+
if interface_name.startswith(front_panel_prefix()):
73+
if VLAN_SUB_INTERFACE_SEPARATOR in interface_name:
74+
return "VLAN_SUB_INTERFACE"
75+
return "PORT"
76+
elif interface_name.startswith(portchannel_prefix()):
77+
if VLAN_SUB_INTERFACE_SEPARATOR in interface_name:
78+
return "VLAN_SUB_INTERFACE"
79+
return "PORTCHANNEL"
80+
elif interface_name.startswith(vlan_prefix()):
81+
return "VLAN_INTERFACE"
82+
elif interface_name.startswith(loopback_prefix()):
83+
return "LOOPBACK_INTERFACE"
84+
else:
85+
return ""

‎src/sonic-py-common/sonic_py_common/multi_asic.py

+12
Original file line numberDiff line numberDiff line change
@@ -344,3 +344,15 @@ def get_asic_index_from_namespace(namespace):
344344
return int(get_asic_id_from_name(namespace))
345345

346346
return 0
347+
348+
# Validate whether a given namespace name is valid in the device.
349+
# This API is significant in multi-asic platforms.
350+
def validate_namespace(namespace):
351+
if not is_multi_asic():
352+
return True
353+
354+
namespaces = get_all_namespaces()
355+
if namespace in namespaces['front_ns'] + namespaces['back_ns']:
356+
return True
357+
else:
358+
return False
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import os
2+
import sys
3+
4+
from sonic_py_common import interface
5+
6+
class TestInterface(object):
7+
@classmethod
8+
def setup_class(cls):
9+
print("SETUP")
10+
11+
def test_get_interface_table_name(self):
12+
result = interface.get_interface_table_name("Ethernet0")
13+
assert result == "INTERFACE"
14+
result = interface.get_interface_table_name("Ethernet0.100")
15+
assert result == "VLAN_SUB_INTERFACE"
16+
result = interface.get_interface_table_name("PortChannel0")
17+
assert result == "PORTCHANNEL_INTERFACE"
18+
result = interface.get_interface_table_name("PortChannel0.100")
19+
assert result == "VLAN_SUB_INTERFACE"
20+
result = interface.get_interface_table_name("Vlan100")
21+
assert result == "VLAN_INTERFACE"
22+
result = interface.get_interface_table_name("Loopback0")
23+
assert result == "LOOPBACK_INTERFACE"
24+
25+
def test_get_port_table_name(self):
26+
result = interface.get_port_table_name("Ethernet0")
27+
assert result == "PORT"
28+
result = interface.get_port_table_name("Ethernet0.100")
29+
assert result == "VLAN_SUB_INTERFACE"
30+
result = interface.get_port_table_name("PortChannel0")
31+
assert result == "PORTCHANNEL"
32+
result = interface.get_port_table_name("PortChannel0.100")
33+
assert result == "VLAN_SUB_INTERFACE"
34+
result = interface.get_port_table_name("Vlan100")
35+
assert result == "VLAN_INTERFACE"
36+
result = interface.get_port_table_name("Loopback0")
37+
assert result == "LOOPBACK_INTERFACE"
38+
39+
@classmethod
40+
def teardown_class(cls):
41+
print("TEARDOWN")

0 commit comments

Comments
 (0)