Skip to content

Commit 6673283

Browse files
Loopback interfaces are part of ifTable,ifXTable and some fixes
1 parent 266bd15 commit 6673283

16 files changed

+393
-106
lines changed

src/sonic_ax_impl/mibs/__init__.py

+119
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from ax_interface.mib import MIBUpdater
1010
from ax_interface.util import oid2tuple
1111
from sonic_ax_impl import logger
12+
from ax_interface.util import mac_decimals
1213

1314
COUNTERS_PORT_NAME_MAP = 'COUNTERS_PORT_NAME_MAP'
1415
COUNTERS_QUEUE_NAME_MAP = 'COUNTERS_QUEUE_NAME_MAP'
@@ -174,6 +175,14 @@ def mgmt_if_entry_table(if_name):
174175

175176
return 'MGMT_PORT|' + if_name
176177

178+
def vlan_if_entry_table(vlan):
179+
"""
180+
:param if_name: given interface to cast
181+
:return: VLAN_TABLE key
182+
"""
183+
184+
return 'VLAN_TABLE:' + vlan
185+
177186

178187
def mgmt_if_entry_table_state_db(if_name):
179188
"""
@@ -255,6 +264,91 @@ def init_mgmt_interface_tables(db_conn):
255264

256265
return oid_name_map, if_alias_map
257266

267+
def init_vlan_interface_tables(db_conn, mac=""):
268+
"""
269+
Initializes interface maps for vlan ports
270+
:param db_conn: db connector
271+
:return: tuple of vlan name to oid map and vlan name to alias map
272+
"""
273+
274+
db_conn.connect(APPL_DB)
275+
276+
vlan_intf_keys = db_conn.keys(APPL_DB, 'INTF_TABLE:Vlan*')
277+
278+
if not vlan_intf_keys:
279+
logger.debug('No vlan interfaces found.' )
280+
return {},{}
281+
282+
oid_name_map = {}
283+
oid_mac_map = {}
284+
for key in vlan_intf_keys:
285+
vlan = key.split(':')[1]
286+
index = get_index_from_str(vlan)
287+
oid_name_map[index] = vlan
288+
#get mac addr of vlan
289+
ent = db_conn.get_all(APPL_DB, key)
290+
if ent and 'mac_addr' in ent:
291+
mactuple = mac_decimals(ent['mac_addr'])
292+
oid_mac_map[index] = ''.join(chr(b) for b in mactuple)
293+
else:
294+
oid_mac_map[index] = mac
295+
296+
logger.debug('vlan interface map:\n' + pprint.pformat(oid_name_map, indent=2))
297+
return oid_name_map, oid_mac_map
298+
299+
def init_mclag_interface_tables(db_conn, mac=""):
300+
"""
301+
Initializes interface maps for vlan ports
302+
:param db_conn: db connector
303+
:return: tuple of vlan name to oid map and vlan name to alias map
304+
"""
305+
306+
db_conn.connect(STATE_DB)
307+
308+
intf_keys = db_conn.keys(STATE_DB, 'MCLAG_LOCAL_INTF_TABLE|*')
309+
310+
if not intf_keys:
311+
logger.debug('No vlan interfaces found.' )
312+
return {},{}
313+
314+
oid_name_map = {}
315+
oid_mac_map = {}
316+
for key in intf_keys:
317+
name = key.split('|')[1]
318+
index = get_index_from_str(name)
319+
oid_name_map[index] = name
320+
#get mac addr of vlan
321+
ent = db_conn.get_all(STATE_DB, key)
322+
if ent and 'interface_mac' in ent:
323+
mactuple = mac_decimals(ent['interface_mac'])
324+
oid_mac_map[index] = ''.join(chr(b) for b in mactuple)
325+
else:
326+
oid_mac_map[index] = mac
327+
328+
logger.debug('vlan interface map:\n' + pprint.pformat(oid_name_map, indent=2))
329+
return oid_name_map, oid_mac_map
330+
331+
def init_loopback_interface_tables(db_conn):
332+
"""
333+
Initializes interface maps for loopback ports
334+
:param db_conn: db connector
335+
:return: tuple of loopback name to oid map
336+
"""
337+
338+
db_conn.connect(CONFIG_DB)
339+
340+
lpbk_intf_keys = db_conn.keys(CONFIG_DB, 'LOOPBACK_INTERFACE|*')
341+
342+
if not lpbk_intf_keys:
343+
logger.debug('No lpbk interfaces found.' )
344+
return {}
345+
346+
lpbk_interfaces = [key.split('|')[1] for key in lpbk_intf_keys]
347+
oid_name_map = {get_index_from_str(lpbk_name): lpbk_name for lpbk_name in lpbk_interfaces}
348+
logger.debug('lpbk interface map:\n' + pprint.pformat(oid_name_map, indent=2))
349+
350+
return oid_name_map
351+
258352
def init_sync_d_interface_tables(db_conn):
259353
"""
260354
Initializes interface maps for SyncD-connected MIB(s).
@@ -433,6 +527,8 @@ def init_sync_d_queue_tables(db_conn):
433527
port_name, queue_index = queue_name.split(':')
434528
queue_index = ''.join(i for i in queue_index if i.isdigit())
435529
port_index = get_index_from_str(port_name)
530+
if port_index is None:
531+
continue
436532
key = queue_key(port_index, queue_index)
437533
port_queues_map[key] = sai_id
438534

@@ -462,6 +558,29 @@ def init_sync_d_queue_tables(db_conn):
462558

463559
return port_queues_map, queue_stat_map, port_queue_list_map
464560

561+
def get_config_device_metadata(db_conn):
562+
"""
563+
:param db_conn: Sonic DB connector
564+
:return: device metadata
565+
"""
566+
567+
DEVICE_METADATA = "DEVICE_METADATA|localhost"
568+
db_conn.connect(db_conn.CONFIG_DB)
569+
570+
device_metadata = db_conn.get_all(db_conn.CONFIG_DB, DEVICE_METADATA)
571+
return device_metadata
572+
573+
def get_interface_naming_mode(db_conn):
574+
"""
575+
:param db_conn: Sonic DB connector
576+
:return: device metadata
577+
"""
578+
579+
device_metadata = get_config_device_metadata(db_conn)
580+
if device_metadata and 'intf_naming_mode' in device_metadata:
581+
return device_metadata['intf_naming_mode']
582+
return None
583+
465584
def get_device_metadata(db_conn):
466585
"""
467586
:param db_conn: Sonic DB connector

src/sonic_ax_impl/mibs/ieee802_1ab.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,10 @@ def reinit_data(self):
114114
Namespace.connect_all_dbs(self.db_conn, mibs.APPL_DB)
115115
self.loc_chassis_data = Namespace.dbs_get_all(self.db_conn, mibs.APPL_DB, mibs.LOC_CHASSIS_TABLE)
116116
if self.loc_chassis_data:
117-
self.loc_chassis_data['lldp_loc_sys_cap_supported'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_supported'])
118-
self.loc_chassis_data['lldp_loc_sys_cap_enabled'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_enabled'])
117+
if 'lldp_loc_sys_cap_supported' in self.loc_chassis_data:
118+
self.loc_chassis_data['lldp_loc_sys_cap_supported'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_supported'])
119+
if 'lldp_loc_sys_cap_enabled' in self.loc_chassis_data:
120+
self.loc_chassis_data['lldp_loc_sys_cap_enabled'] = parse_sys_capability(self.loc_chassis_data['lldp_loc_sys_cap_enabled'])
119121

120122
def update_data(self):
121123
"""
@@ -145,6 +147,7 @@ def __init__(self):
145147
self.db_conn = Namespace.init_namespace_dbs()
146148
# establish connection to application database.
147149
Namespace.connect_all_dbs(self.db_conn, mibs.APPL_DB)
150+
Namespace.connect_all_dbs(self.db_conn, mibs.CONFIG_DB)
148151
self.if_name_map = {}
149152
self.if_alias_map = {}
150153
self.if_id_map = {}
@@ -328,6 +331,8 @@ def reinit_data(self):
328331
logger.error("Invalid local mgmt IP {}".format(self.mgmt_ip_str))
329332
return
330333

334+
if mgmt_ip_sub_oid == None:
335+
return
331336
sub_oid = (ManAddrConst.man_addr_subtype_ipv4,
332337
*mgmt_ip_sub_oid)
333338
self.man_addr_list.append(sub_oid)
@@ -430,7 +435,9 @@ def update_data(self):
430435
self.lldp_counters = {}
431436
for if_oid, if_name in self.oid_name_map.items():
432437
lldp_kvs = Namespace.dbs_get_all(self.db_conn, mibs.APPL_DB, mibs.lldp_entry_table(if_name))
433-
if not lldp_kvs:
438+
if (not lldp_kvs or
439+
'lldp_rem_time_mark' not in lldp_kvs or
440+
'lldp_rem_index' not in lldp_kvs ):
434441
continue
435442
try:
436443
# OID index for this MIB consists of remote time mark, if_oid, remote_index.
@@ -496,13 +503,17 @@ def __init__(self):
496503
# establish connection to application database.
497504
Namespace.connect_all_dbs(self.db_conn, mibs.APPL_DB)
498505
self.if_range = []
506+
self.mgmt_ips = {}
499507
self.oid_name_map = {}
500508
self.mgmt_oid_name_map = {}
501509
self.pubsub = [None] * len(self.db_conn)
502510

503511
def update_rem_if_mgmt(self, if_oid, if_name):
504512
lldp_kvs = Namespace.dbs_get_all(self.db_conn, mibs.APPL_DB, mibs.lldp_entry_table(if_name))
505-
if not lldp_kvs or 'lldp_rem_man_addr' not in lldp_kvs:
513+
if (not lldp_kvs or
514+
'lldp_rem_man_addr' not in lldp_kvs or
515+
'lldp_rem_time_mark' not in lldp_kvs or
516+
'lldp_rem_index' not in lldp_kvs ):
506517
# this interfaces doesn't have remote lldp data, or the peer doesn't advertise his mgmt address
507518
return
508519
try:
@@ -576,6 +587,7 @@ def reinit_data(self):
576587
Namespace.connect_all_dbs(self.db_conn, mibs.APPL_DB)
577588

578589
self.if_range = []
590+
self.mgmt_ips = {}
579591
for if_oid, if_name in self.oid_name_map.items():
580592
self.update_rem_if_mgmt(if_oid, if_name)
581593

0 commit comments

Comments
 (0)