@@ -56,6 +56,9 @@ CHASSIS_MODULE_INFO_OPERSTATUS_FIELD = 'oper_status'
5656CHASSIS_MODULE_INFO_NUM_ASICS_FIELD = 'num_asics'
5757CHASSIS_MODULE_INFO_ASICS = 'asics'
5858CHASSIS_MODULE_INFO_SERIAL_FIELD = 'serial'
59+ CHASSIS_MODULE_INFO_PRESENCE_FIELD = 'presence'
60+ CHASSIS_MODULE_INFO_MODEL_FIELD = 'model'
61+ CHASSIS_MODULE_INFO_REPLACEABLE_FIELD = 'is_replaceable'
5962
6063CHASSIS_ASIC_INFO_TABLE = 'CHASSIS_ASIC_TABLE'
6164CHASSIS_FABRIC_ASIC_INFO_TABLE = 'CHASSIS_FABRIC_ASIC_TABLE'
@@ -80,6 +83,8 @@ DEFAULT_DPU_REBOOT_TIMEOUT = 360
8083PLATFORM_ENV_CONF_FILE = "/usr/share/sonic/platform/platform_env.conf"
8184PLATFORM_JSON_FILE = "/usr/share/sonic/platform/platform.json"
8285
86+ PHYSICAL_ENTITY_INFO_TABLE = 'PHYSICAL_ENTITY_INFO'
87+
8388CHASSIS_INFO_UPDATE_PERIOD_SECS = 10
8489CHASSIS_DB_CLEANUP_MODULE_DOWN_PERIOD = 30 # Minutes
8590
@@ -146,6 +151,15 @@ def get_formatted_time(datetimeobj=None, op_format=None):
146151 date_obj = datetimeobj if datetimeobj else datetime .now (timezone .utc )
147152 return date_obj .strftime (op_format if op_format else "%a %b %d %I:%M:%S %p UTC %Y" )
148153
154+ def update_entity_info (table , parent_name , key , index , serial , model , is_replaceable ):
155+ fvs = swsscommon .FieldValuePairs (
156+ [('position_in_parent' , str (index )),
157+ ('parent_name' , parent_name ),
158+ ('serial' , serial ),
159+ ('model' , model ),
160+ ('is_replaceable' , is_replaceable )])
161+ table .set (key , fvs )
162+
149163#
150164# Module Config Updater ========================================================
151165#
@@ -259,6 +273,7 @@ class ModuleUpdater(logger.Logger):
259273 self .chassis_table = swsscommon .Table (state_db , CHASSIS_INFO_TABLE )
260274 self .module_table = swsscommon .Table (state_db , CHASSIS_MODULE_INFO_TABLE )
261275 self .midplane_table = swsscommon .Table (state_db , CHASSIS_MIDPLANE_INFO_TABLE )
276+ self .phy_entity_table = swsscommon .Table (state_db , PHYSICAL_ENTITY_INFO_TABLE )
262277 self .info_dict_keys = [CHASSIS_MODULE_INFO_NAME_FIELD ,
263278 CHASSIS_MODULE_INFO_DESC_FIELD ,
264279 CHASSIS_MODULE_INFO_SLOT_FIELD ,
@@ -301,6 +316,8 @@ class ModuleUpdater(logger.Logger):
301316 self .module_table ._del (name )
302317 if self .midplane_table .get (name ) is not None :
303318 self .midplane_table ._del (name )
319+ if self .phy_entity_table .get (name ) is not None :
320+ self .phy_entity_table ._del (name )
304321
305322 if self .chassis_table is not None :
306323 self .chassis_table ._del (CHASSIS_INFO_KEY_TEMPLATE .format (1 ))
@@ -365,10 +382,23 @@ class ModuleUpdater(logger.Logger):
365382 str (module_info_dict [CHASSIS_MODULE_INFO_SLOT_FIELD ])),
366383 (CHASSIS_MODULE_INFO_OPERSTATUS_FIELD , module_info_dict [CHASSIS_MODULE_INFO_OPERSTATUS_FIELD ]),
367384 (CHASSIS_MODULE_INFO_NUM_ASICS_FIELD , str (len (module_info_dict [CHASSIS_MODULE_INFO_ASICS ]))),
368- (CHASSIS_MODULE_INFO_SERIAL_FIELD , module_info_dict [CHASSIS_MODULE_INFO_SERIAL_FIELD ])])
385+ (CHASSIS_MODULE_INFO_SERIAL_FIELD , module_info_dict [CHASSIS_MODULE_INFO_SERIAL_FIELD ]),
386+ (CHASSIS_MODULE_INFO_PRESENCE_FIELD , module_info_dict [CHASSIS_MODULE_INFO_PRESENCE_FIELD ]),
387+ (CHASSIS_MODULE_INFO_REPLACEABLE_FIELD , module_info_dict [CHASSIS_MODULE_INFO_REPLACEABLE_FIELD ]),
388+ (CHASSIS_MODULE_INFO_MODEL_FIELD , module_info_dict [CHASSIS_MODULE_INFO_MODEL_FIELD ])])
389+
390+
369391 prev_status = self .get_module_current_status (key )
370392 self .module_table .set (key , fvs )
371393
394+ update_entity_info (self .phy_entity_table ,
395+ "chassis {}" .format (1 ),
396+ key ,
397+ module_index ,
398+ module_info_dict [CHASSIS_MODULE_INFO_SERIAL_FIELD ],
399+ module_info_dict [CHASSIS_MODULE_INFO_MODEL_FIELD ],
400+ module_info_dict [CHASSIS_MODULE_INFO_REPLACEABLE_FIELD ])
401+
372402 # Construct key for down_modules dict. Example down_modules key format: LINE-CARD0|<hostname>
373403 fvs = self .hostname_table .get (key )
374404 if isinstance (fvs , list ) and fvs [0 ] is True :
@@ -452,13 +482,19 @@ class ModuleUpdater(logger.Logger):
452482 asics = try_get (self .chassis .get_module (module_index ).get_all_asics ,
453483 default = [])
454484 serial = try_get (self .chassis .get_module (module_index ).get_serial )
485+ presence = try_get (self .chassis .get_module (module_index ).get_presence )
486+ replaceable = try_get (self .chassis .get_module (module_index ).is_replaceable )
487+ model = try_get (self .chassis .get_module (module_index ).get_model )
455488
456489 module_info_dict [CHASSIS_MODULE_INFO_NAME_FIELD ] = name
457490 module_info_dict [CHASSIS_MODULE_INFO_DESC_FIELD ] = str (desc )
458491 module_info_dict [CHASSIS_MODULE_INFO_SLOT_FIELD ] = slot
459492 module_info_dict [CHASSIS_MODULE_INFO_OPERSTATUS_FIELD ] = str (status )
460493 module_info_dict [CHASSIS_MODULE_INFO_ASICS ] = asics
461494 module_info_dict [CHASSIS_MODULE_INFO_SERIAL_FIELD ] = str (serial )
495+ module_info_dict [CHASSIS_MODULE_INFO_PRESENCE_FIELD ] = str (presence )
496+ module_info_dict [CHASSIS_MODULE_INFO_REPLACEABLE_FIELD ] = str (replaceable )
497+ module_info_dict [CHASSIS_MODULE_INFO_MODEL_FIELD ] = str (model )
462498
463499 return module_info_dict
464500
0 commit comments