o
    O6ufI1  ã                   @   sZ   d dl mZmZmZmZmZmZ G dd„ deƒZG dd„ deeƒZG dd„ deeeƒZ	dS )	é    )ÚPluginÚRedHatPluginÚUbuntuPluginÚDebianPluginÚSoSPredicateÚ	PluginOptc                	       sž   e Zd ZdZdZdZdZeddde› �d�ed	d
edd�edde	dd�edddd�edddd�gZ
dZg d¢ZdZ‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS ) Ú
Networkingz,Network and networking devices configurationÚ
networking)ÚnetworkÚhardwareÚsystemzwww.example.comÚ
tracerouteFzcollect a traceroute to )ÚdefaultÚdescúnamespace-patternÚ zFSpecific namespace names or patterns to collect, whitespace delimited.)r   Úval_typer   Ú
namespacesNz0Number of namespaces to collect, 0 for unlimitedúethtool-namespacesTz;Toggle if ethtool commands should be run for each namespaceÚ
eepromdumpz*Toggle collection of 'ethtool -e' for NICsz-W)Útcp_diagÚudp_diagÚ	inet_diagÚ	unix_diagÚnetlink_diagÚaf_packet_diagÚxsk_diagÚacdgiklmPSTc                    s@  t ƒ  ¡  |  dddœ¡ |  g d¢¡ |  g d¢¡ | jdddd� | jd	d
d
dgd� |  d¡ | jd| j› d�dd� |  ddd| j› d�ddddddddddddd d!d"d#g¡ |  d$¡r…|  g d%¢¡ |  d&¡}|d' d(kr…|d)  	¡ }|D ]
}|  d*|› �¡ qzd+}t
| d,gd-�}| j||d.d/� |  ¡  |  ¡  d S )0NÚbondÚhosts)z/proc/net/bonding/bond.*z
/etc/hosts)z/etc/dnsmasq*z
/etc/host*z/etc/inetd.confz/etc/iproute2z/etc/network*z/etc/nsswitch.confú/etc/resolv.confz/etc/xinetd.confz/etc/xinetd.dz/etc/yp.confz
/proc/net/z!/sys/class/net/*/device/numa_nodez/sys/class/net/*/flagsz/sys/class/net/*/statistics/)z/proc/net/rpc/use-gss-proxyz/proc/net/rpc/*/channelz/proc/net/rpc/*/flushz/proc/net/cdpz/sys/net/cdpz/proc/net/eiconz
ip -o addrÚip_addr)Úroot_symlinkÚtagsúip route show table allÚip_routeÚiproute_show_table_allÚ
plotnetcfgúnetstat ú -neopaÚnetstat)r"   ú
nstat -zasú
netstat -sú -agnznetworkctl status -azip -6 route show table allzip -d route show cachezip -d -6 route show cacheúip -4 rule listúip -6 rule listúip vrf showúip -s -d linkúip -d addresszifenslave -azip mroute showzip maddr showúip -s -s neigh showzip neigh show nud noarpzbiosdevname -dztc -s qdisc showz/sys/class/devlink)zdevlink dev param showzdevlink dev infozdevlink port showzdevlink devÚstatusr   Úoutputzdevlink dev eswitch show zip -s macsec showÚmacsec©ÚkmodsT©ÚpredÚchanges)ÚsuperÚsetupÚadd_file_tagsÚadd_copy_specÚadd_forbidden_pathÚadd_cmd_outputÚns_wideÚ
path_isdirÚcollect_cmd_outputÚ
splitlinesr   Úcollect_ss_ip_ethtool_infoÚcollect_bridge_info)ÚselfÚdevlinksÚdevlinks_listÚdevlinkÚip_macsec_show_cmdÚmacsec_pred©Ú	__class__© ú?/usr/lib/python3/dist-packages/sos/report/plugins/networking.pyr=   /   sd   
þÿÿ
ÿí

zNetworking.setupc              
   C   sF   | j D ]}|  d|› d�d|› �i¡ q|  dddddd	d
dœ¡ dS )z% Command tags for ip/ethtool/netstat ú	ethtool -z .*Úethool_Úethtoolr!   Úip_neigh_showÚ	ip_s_linkr*   Únetstat_agnÚ	netstat_s)zethtool [^-].*r2   r3   r1   znetstat.*-neopaznetstat.*-agnr,   N)Úethtool_shortoptsÚadd_cmd_tags)rH   ÚoptrP   rP   rQ   Úadd_command_tags‰   s   
ÿùzNetworking.add_command_tagsc                 C   s   |   g d¢¡ dS )zf Collect information about bridges (some data already collected via
        "ip .." commands)
        )zbridge -s -s -d link showzbridge -s -s -d -t fdb showzbridge -s -s -d -t mdb showzbridge -d vlan showN)rA   ©rH   rP   rP   rQ   rG   š   s   zNetworking.collect_bridge_infoc                 C   sZ  d}t | | jddid�}| j||dd� dd„ | jD ƒ}| jd	d„ |D ƒd
d� | jg d¢d
d� |  d¡rDd}|  d¡ | j|d
d� |  d¡rT| jd| j› �dd� |  d¡ d}|  |  d¡|  d¡¡}|�r'dddœ}dddœ}| j	| t | |d�d�r†t | dgd�nd}	| j	| t | |d�d�ršt | dgd�nd}
|D ]ˆ}| j
d  | }d!|› �}|| d" }| j|d# |d$ |d% |d& |d' |d( |d) |d*| j› d+� |d, |d*| j› d-� |d. gd/|d0� | j|d1 g|	|d/d2� | j|d3 g|
|d/d2� |d }| j|||d4� |  d5¡�r&| j|d6 |d7 |d8 |d9 g|d
 d/|d:� qž|  ¡  dS );z( Collect ss, ip and ethtool cmd outputs zss -peaonmir8   Úall)r8   ÚrequiredTr9   c                 S   s   g | ]}d |› �‘qS )rR   rP   )Ú.0r[   rP   rP   rQ   Ú
<listcomp>®   s    z9Networking.collect_ss_ip_ethtool_info.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS )z %(dev)srP   )r`   Ú_cmdrP   rP   rQ   ra   ¯   s    ÿÚethernet)Údevices)úethtool %(dev)sz ethtool --phy-statistics %(dev)sz!ethtool --show-priv-flags %(dev)szethtool --show-eee %(dev)sztc -s filter show dev %(dev)sz%tc -s filter show dev %(dev)s ingressr   zethtool -e %(dev)szwWARNING: collecting an eeprom dump is known to cause certain NIC drivers (e.g. bnx2x/tg3) to interrupt device operationr   z/bin/traceroute -n éd   )Úpriorityzip netnszip netns exec r   r   ziptables -VÚ	nf_tables)Úcmdr5   zip6tables -V)Úcmd_outputs)r:   r7   NÚnamespaced_networkznamespaces/ú zip -d address showr$   r3   r.   r/   r0   z	sysctl -ar(   r)   r,   r-   r+   é2   )rg   Úsubdirziptables-save)r:   rn   rg   zip6tables-save)r:   rn   r   re   zethtool -i %(dev)szethtool -k %(dev)szethtool -S %(dev)s)rd   rg   rn   )r   Úss_kmodsrA   rY   Úadd_device_cmdÚ
get_optionÚ	_log_warnÚ
trace_hostÚget_network_namespacesÚtest_predicaterd   rB   r\   )rH   Úss_cmdÚss_predÚ_ecmdsri   Ú
cmd_prefixr   ÚcoutÚco6Úiptables_with_nftÚip6tables_with_nftÚ	namespaceÚ_devsÚ_subdirÚns_cmd_prefixrP   rP   rQ   rF   ¥   sª   ÿ
ÿþ
ù


ÿ
þ


ÿÿý
ÿÿý
õôýýü
û€z%Networking.collect_ss_ip_ethtool_info)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesrs   r   ÚstrÚintÚoption_listrB   ro   rY   r=   r\   rG   rF   Ú__classcell__rP   rP   rN   rQ   r      s8    ÿÿÿÿÿõZr   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚRedHatNetworkingzrhn.redhat.comc                    sN   z| j j d¡}t|d d ƒdk rd| _W n	 ty   Y nw tƒ  ¡  d S )Nz	net-toolsÚversionr   é   z-T)ÚpolicyÚpackage_managerÚpkg_by_namer‰   rB   Ú	Exceptionr<   r=   )rH   Únetstat_pkgrN   rP   rQ   r=     s   €þzRedHatNetworking.setup)r‚   rƒ   r„   rs   r=   r‹   rP   rP   rN   rQ   rŒ     s    rŒ   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚUbuntuNetworkingzarchive.ubuntu.comc                    s8   g d¢}| j  ¡ dkr|| _tƒ  ¡  |  g d¢¡ d S )N)	r   r   r   r   r   r   r   Ú
mptcp_diagÚraw_diagg
×£p=
6@)z/etc/netplan/*.yamlz/etc/network/interfacesz/etc/network/interfaces.dr    z/etc/resolvconfz/lib/netplan/*.yamlz/run/netplan/*.yamlz/run/systemd/network)r�   Údist_versionro   r<   r=   r?   )rH   Úubuntu_jammy_and_after_ss_kmodsrN   rP   rQ   r=   "  s
   
zUbuntuNetworking.setupc                 C   s   |   ddd¡ d S )Nz/etc/netplanz(\s+password:).*z	\1 ******)Údo_path_regex_subr]   rP   rP   rQ   Úpostproc:  s
   ýzUbuntuNetworking.postproc)r‚   rƒ   r„   rs   r=   rš   r‹   rP   rP   rN   rQ   r”     s    r”   N)
Úsos.report.pluginsr   r   r   r   r   r   r   rŒ   r”   rP   rP   rP   rQ   Ú<module>   s      