@@ -273,11 +273,9 @@ def on_pmpe(self, fd_p):
273
273
pkt = new_uint8_t_arr (pkt_size )
274
274
recv_info_p = new_sx_receive_info_t_p ()
275
275
pmpe_t = sx_event_pmpe_t ()
276
- port_attributes_list = new_sx_port_attributes_t_arr (64 )
277
276
port_cnt_p = new_uint32_t_p ()
278
- uint32_t_p_assign (port_cnt_p ,64 )
277
+ uint32_t_p_assign (port_cnt_p , 0 )
279
278
label_port_list = []
280
- label_port = None
281
279
module_state = 0
282
280
283
281
rc = sx_lib_host_ifc_recv (fd_p , pkt , pkt_size_p , recv_info_p )
@@ -296,29 +294,44 @@ def on_pmpe(self, fd_p):
296
294
if module_state == SDK_SFP_STATE_ERR :
297
295
logger .log_error ("Receive PMPE error event on module {}: status {} error type {}" .format (module_id , module_state , error_type ))
298
296
elif module_state == SDK_SFP_STATE_DIS :
299
- logger .log_info ("Receive PMPE disable event on module {}: status {}" .format (module_id , module_state ))
297
+ logger .log_notice ("Receive PMPE disable event on module {}: status {}" .format (module_id , module_state ))
300
298
elif module_state == SDK_SFP_STATE_IN or module_state == SDK_SFP_STATE_OUT :
301
- logger .log_info ("Receive PMPE plug in/out event on module {}: status {}" .format (module_id , module_state ))
299
+ logger .log_notice ("Receive PMPE plug in/out event on module {}: status {}" .format (module_id , module_state ))
302
300
else :
303
301
logger .log_error ("Receive PMPE unknown event on module {}: status {}" .format (module_id , module_state ))
304
- for i in range (port_list_size ):
305
- logical_port = sx_port_log_id_t_arr_getitem (logical_port_list , i )
306
- rc = sx_api_port_device_get (self .handle , 1 , 0 , port_attributes_list , port_cnt_p )
307
- port_cnt = uint32_t_p_value (port_cnt_p )
308
-
309
- for i in range (port_cnt ):
310
- port_attributes = sx_port_attributes_t_arr_getitem (port_attributes_list ,i )
311
- if port_attributes .log_port == logical_port :
312
- label_port = port_attributes .port_mapping .module_port
313
- break
314
302
315
- if label_port is not None :
316
- label_port_list .append (label_port )
303
+ # Call sx_api_port_device_get with port_cnt_p=0, SDK will return the logical port number
304
+ rc = sx_api_port_device_get (self .handle , 1 , 0 , None , port_cnt_p )
305
+ if rc != SX_STATUS_SUCCESS :
306
+ logger .log_error ("Failed to get logical port number" )
307
+ status = False
308
+ else :
309
+ port_cnt = uint32_t_p_value (port_cnt_p )
310
+ port_attributes_list = new_sx_port_attributes_t_arr (port_cnt )
311
+ rc = sx_api_port_device_get (self .handle , 1 , 0 , port_attributes_list , port_cnt_p )
312
+ if rc != SX_STATUS_SUCCESS :
313
+ logger .log_error ("Failed to get logical port attributes" )
314
+ status = False
315
+ else :
316
+ for i in range (port_list_size ):
317
+ label_port = None
318
+ logical_port = sx_port_log_id_t_arr_getitem (logical_port_list , i )
319
+ for j in range (port_cnt ):
320
+ port_attributes = sx_port_attributes_t_arr_getitem (port_attributes_list ,j )
321
+ if port_attributes .log_port == logical_port :
322
+ label_port = port_attributes .port_mapping .module_port
323
+ break
324
+
325
+ if label_port is not None :
326
+ label_port_list .append (label_port )
327
+ delete_sx_port_attributes_t_arr (port_attributes_list )
317
328
318
329
delete_uint32_t_p (pkt_size_p )
319
330
delete_uint8_t_arr (pkt )
320
331
delete_sx_receive_info_t_p (recv_info_p )
321
- delete_sx_port_attributes_t_arr (port_attributes_list )
322
332
delete_uint32_t_p (port_cnt_p )
323
333
334
+ if not label_port_list :
335
+ logger .log_error ('Dropping PMPE event due to label port not found' )
336
+
324
337
return status , label_port_list , module_state , error_type
0 commit comments