
    ~ g                     <    S SK r S SKrS SKJrJr   " S S\\5      rg)    N)PluginIndependentPluginc                   :    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
rg)MellanoxFirmware   z&Nvidia(Mellanox) firmware tools outputmellanox_firmware)hardwaresystem)mstmstflintzMellanox Technologiesc                 f    U R                  S5      nUS   S:H  =(       a    U R                  US   ;   $ )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::0200statusr   output)exec_cmdMLNX_STRING)selflspcis     F/usr/lib/python3/dist-packages/sos/report/plugins/mellanox_firmware.pycheck_enabledMellanoxFirmware.check_enabled   s6     67X!#K(8(8E(O(KK    c                    U R                  S5      (       d  U R                  S5        g U R                  S5      nUS   S:w  a  g U R                  S5      nUS   S:w  a  g U R                  S5        U R                  SS	S
9  U R                  SS	S
9  [        R
                  " S5      n/ nU H  nSU;   d  M  UR                  U5        M     U H+  nU R                  SU S3S	S
9  U R                  SU S3S	S
9  M-     U R                  SSS9  g )Nallow_system_changesztSkipping mst/mlx cable commands as system changeswould be made. Use --allow-system-changes toenable this collection.flint --versionr   r   z	mst startzmst cable addzmst status -v
   timeout	mlxcablesz/dev/mstcablezmlxcables -d z --DDMz --dumpzmst stopT)changes)
get_option	_log_infor   collect_cmd_outputoslistdirappend)r   coutr   devicemlxcables        r   collectMellanoxFirmware.collect#   s1   566NN 5 6  }}./>Q&&{3>Q0<R8zz*%	F&   (  "H##mH:V$D,. $ 0##mH:W$E,. $ 0 "
 	
D9r   c           
         / nU R                  S5      nUS   S:w  a  g US   R                  5        H  nUR                  USS S-   5        M     [        U5      n/ nU R	                  S5      nUS   S:w  a  SS	/S
S/S
S/SS/SS//nOSS/SS	/SS/SS/SS/SS/SS//nU Hf  nU H!  nU R                  US    SU SUS    3SS9  M#     [        S5       H-  nU R                  SU 35        [        R                  " S5        M/     Mh     g )Nr   r   r   r      z00.0r   z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       r      zmstdump )	r$   
splitlinesr'   setr   add_cmd_outputrangetimesleep)	r   devicesdevice_listlinecommandsr(   r)   command_s	            r   setupMellanoxFirmware.setupC   s{   --.FG x A%)446D
 NN4!9V+, 7 g,  }}./>Q !'*'&<=#H  01 '*e$d#<=# <=H F###wqzl!F81'.qzl%4=? $ A $ 1X##hvh$78

1  r    N)__name__
__module____qualname____firstlineno__
short_descplugin_nameprofilespackagesr   r   r+   r@   __static_attributes__rB   r   r   r   r      s,    9J%K%H"H)KL:@9r   r   )r%   r8   sos.report.pluginsr   r   r   rB   r   r   <module>rM      s!    
  8lv0 lr   