a >h@s6ddlZddlZddlmZmZGdddeeZdS)N)PluginIndependentPluginc@s8eZdZdZdZdZdZdZddZdd Z d d Z d S) MellanoxFirmwarez&Nvidia(Mellanox) firmware tools outputZmellanox_firmware)Zhardwaresystem)ZmstZmstflintzMellanox TechnologiescCs$|d}|ddko"|j|dvS)z Checks if this plugin should be executed at all. We will only enable the plugin if there is a Mellanox Technologies network adapter lspci -D -d 15b3::0200statusroutput)exec_cmd MLNX_STRING)selfZlspcir H/usr/lib/python3.9/site-packages/sos/report/plugins/mellanox_firmware.py check_enableds zMellanoxFirmware.check_enabledcCs|ds|ddS|d}|ddkr2dS|d}|ddkrLdS|d|jdd d |jd d d td }g}|D]}d |vr||q|D]0}|jd|dd d |jd|dd d q|jddddS)NZallow_system_changesztSkipping mst/mlx cable commands as system changeswould be made. Use --allow-system-changes toenable this collection.flint --versionrrz mst startz mst cable addz mst status -v timeout mlxcablesz/dev/mstZcablez mlxcables -d z --DDMz --dumpzmst stopT)Zchanges)Z get_optionZ _log_infor collect_cmd_outputoslistdirappend)r coutrdeviceZmlxcabler r r collect#s2         zMellanoxFirmware.collectc Cs g}|d}|ddkrdS|dD]}||dddq*t|}g}|d}|ddkrdd gd d gd d gd dgddgg}n.ddgdd gdd gdd gddgddgddgg}|D]\}|D]*}|j|dd|d|dddqtdD]}|d|tdqqdS)Nrrrrz00.0rz mstconfig -d z -e qz mstflint -d z dcz qz mstreg -d z --reg_name ROCE_ACCL --getz mstlink -d z mlxdump -d z pcie_uc --allz flint -d z mlxreg -d z mlxlink -d z fwtrace -d z -i all --tracer_mode FIFO rzmstdump ) r splitlinesrsetr Zadd_cmd_outputrangetimesleep) r ZdevicesZ device_listlineZcommandsrrZcommand_r r r setupCsD       zMellanoxFirmware.setupN) __name__ __module__ __qualname__Z short_descZ plugin_nameZprofilesZpackagesr rrr(r r r r rs  r)rr$Zsos.report.pluginsrrrr r r r  s