o
    O6ufÍ  ã                   @   s6   d dl Z d dlZd dlmZmZ G dd„ deeƒZdS )é    N)ÚPluginÚIndependentPluginc                   @   s8   e Zd ZdZdZdZdZdZdd„ Zdd	„ Z	d
d„ Z
dS )ÚMellanoxFirmwarez&Nvidia(Mellanox) firmware tools outputÚmellanox_firmware)ÚhardwareÚsystem)ÚmstÚmstflintzMellanox Technologiesc                 C   s$   |   d¡}|d dko| j|d v 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Úlspci© r   úF/usr/lib/python3/dist-packages/sos/report/plugins/mellanox_firmware.pyÚcheck_enabled   s   
zMellanoxFirmware.check_enabledc                 C   sä   |   d¡s|  d¡ d S |  d¡}|d dkrd S |  d¡}|d dkr&d S |  d¡ | jdd	d
� | jdd	d
� t d¡}g }|D ]}d|v rM| |¡ qB|D ]}| jd|› d�d	d
� | jd|› d�d	d
� qP| jddd� d S )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Úmlxcabler   r   r   Úcollect#   s4   






€ÿÿzMellanoxFirmware.collectc           	   	   C   s   g }|   d¡}|d dkrd S |d  ¡ D ]}| |dd… d ¡ qt|ƒ}g }|  d¡}|d dkrFdd	gd
dgd
dgddgddgg}nddgdd	gddgddgddgddgddgg}|D ].}|D ]}| j|d › d|› d|d › �dd� qctdƒD ]}|  d|› �¡ t d¡ q}q_d S )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Ú_r   r   r   ÚsetupC   sH   

ûù	ÿÿþøzMellanoxFirmware.setupN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚpackagesr   r   r%   r8   r   r   r   r   r      s    	 r   )r   r0   Úsos.report.pluginsr   r   r   r   r   r   r   Ú<module>   s   
