@@ -264,12 +264,12 @@ func (n *network) GetDevlinkDeviceParam(pciAddr, paramName string) (string, erro
264264 funcLog .Error (err , "GetDevlinkDeviceParam(): fail to get devlink device param" )
265265 return "" , err
266266 }
267- if len (param .Values ) == 0 {
268- err = fmt .Errorf ("param %s has no value" , paramName )
269- funcLog .Error (err , "GetDevlinkDeviceParam(): error" )
270- return "" , err
267+ if len (param .Values ) == 0 || param .Values [0 ].Data == nil {
268+ funcLog .Info ("GetDevlinkDeviceParam(): WARNING: can't read devlink parameter from the device, an empty value received" )
269+ return "" , nil
271270 }
272271 var value string
272+ var ok bool
273273 switch param .Type {
274274 case nl .DEVLINK_PARAM_TYPE_U8 , nl .DEVLINK_PARAM_TYPE_U16 , nl .DEVLINK_PARAM_TYPE_U32 :
275275 var valData uint64
@@ -281,14 +281,22 @@ func (n *network) GetDevlinkDeviceParam(pciAddr, paramName string) (string, erro
281281 case uint32 :
282282 valData = uint64 (v )
283283 default :
284- return "" , fmt .Errorf ("unexpected uint type type " )
284+ return "" , fmt .Errorf ("value is not uint " )
285285 }
286286 value = strconv .FormatUint (valData , 10 )
287287
288288 case nl .DEVLINK_PARAM_TYPE_STRING :
289- value = param .Values [0 ].Data .(string )
289+ value , ok = param .Values [0 ].Data .(string )
290+ if ! ok {
291+ return "" , fmt .Errorf ("value is not a string" )
292+ }
290293 case nl .DEVLINK_PARAM_TYPE_BOOL :
291- value = strconv .FormatBool (param .Values [0 ].Data .(bool ))
294+ var boolValue bool
295+ boolValue , ok = param .Values [0 ].Data .(bool )
296+ if ! ok {
297+ return "" , fmt .Errorf ("value is not a bool" )
298+ }
299+ value = strconv .FormatBool (boolValue )
292300 default :
293301 return "" , fmt .Errorf ("unknown value type: %d" , param .Type )
294302 }
0 commit comments