3 ܓi@s6ddlZddlZddlmZmZGdddeeZdS)N)PluginIndependentPluginc@s8eZdZdZdZdZdZdZdd Zd d Z d d Z dS)MellanoxFirmwarez&Nvidia(Mellanox) firmware tools outputZmellanox_firmwarehardwaresystemmstmstflintzMellanox TechnologiescCs$|jd}|ddko"|j|dkS)z Checks if this plugin should be executed at all. We will only enable the plugin if there is a Mellanox Technologies network adapter zlspci -D -d 15b3::0200statusroutput)exec_cmd MLNX_STRING)selfZlspcir'/usr/lib/python3.6/mellanox_firmware.py check_enableds zMellanoxFirmware.check_enabledcCs|jds|jddS|jd}|ddkr2dS|jd}|ddkrLdS|jd|jdd d |jd d d tjd }g}x|D]}d |kr|j|qWx8|D]0}|jd|dd d |jd|dd d qW|jddddS)NZallow_system_changesztSkipping mst/mlx cable commands as system changeswould be made. Use --allow-system-changes toenable this collection.zflint --versionr rz 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 coutrdeviceZmlxcablerrrcollect#s.           zMellanoxFirmware.collectc Cs2g}|jd}|ddkrdSx*|djD]}|j|dddq,Wt|}g}|jd}|ddkrdd gd d gd d gd dgddgg}n.ddgdd gdd gdd gddgddgddgg}xn|D]f}x2|D]*}|j|dd|d|dddqWx,tdD] }|jd|tjdqWqWdS)Nzlspci -D -d 15b3::0200r rr z00.0zflint --versionz 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_outputrangetimeZsleep) r ZdevicesZ device_listlineZcommandsrrZcommand_rrrsetupCs:         zMellanoxFirmware.setupN)rr)rr) __name__ __module__ __qualname__Z short_descZ plugin_nameZprofilesZpackagesr rrr'rrrrrs  r)rr$Zsos.report.pluginsrrrrrrr s