o
    *b-                     @   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dZ fddZ  ZS )
Networkingz,Network and networking devices configurationZ
networking)ZnetworkZhardwaresystemzwww.example.com
tracerouteFzcollect a traceroute to %s)defaultdescnamespace_pattern zFSpecific namespace names or patterns to collect, whitespace delimited.)r   Z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-WZacdgiklmPSTc                    s  t t|   | jD ]}| d| d| i q
| ddd | g d | g d | jdd	d	d
 | jdddd
 | d | jd| j	 dd | ddd| j	 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*|  qd+}t| d,gd-}| j||d.d/ d0}t| g d1d2d3id4}| j||d.d/ | d5D ]E  d6krq|  fd7d8| jD  | jd9  d:  d;  d<  d=  d=  d> g d? | d@rdA  }	| dB|	  | |	 q| g dC | dDr| jdE| j dFdG | dH dI}
| | dJ| dK}|rcdLdMdN}dOdMdN}| j| t| |dPdQrLt| dMgd-nd }| j| t| |dPdQrat| dMgd-nd }|D ]}dR| }|
| dS }| j|dT |d |d  |dU |d| j	  |d |d| j	  |d gdV|dW | j|dX g||dVdY | j|dZ g||dVdY |d0 }| j|||d[ | d\r| |d] }|d)  D ]&  d6krאq| j|d9   |d^   |d_   |d`   gdV|dW qΐqed S )aNzethtool -%s .*z	ethool_%sZbondZhosts)z/proc/net/bonding/bond.*z
/etc/hosts)z
/proc/net/z/etc/nsswitch.confz/etc/yp.confz/etc/inetd.confz/etc/xinetd.confz/etc/xinetd.dz
/etc/host*/etc/resolv.confz/etc/network*z/etc/dnsmasq*z!/sys/class/net/*/device/numa_nodez/sys/class/net/*/flagsz/sys/class/net/*/statistics/z/etc/iproute2)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 addrZip_addr)root_symlinktagszroute -nZrouteZ
plotnetcfgznetstat %s -neopaZnetstat)r   z
nstat -zasz
netstat -sznetstat %s -agnznetworkctl status -azip route show table allzip -6 route show table allzip -d route show cachezip -d -6 route show cachez
ip -4 rulez
ip -6 rulezip -s -d linkzip -d addresszifenslave -azip mroute showzip maddr showz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 %szip -s macsec showZmacsec)kmodsT)predZchangeszss -peaonmi)Ztcp_diagZudp_diagZ	inet_diagZ	unix_diagZnetlink_diagZaf_packet_diagZxsk_diagr   all)r   requiredz/sys/class/net/Zbonding_mastersc                    s   g | ]}d | f qS )zethtool -%s %s ).0optZethr   ?/usr/lib/python3/dist-packages/sos/report/plugins/networking.py
<listcomp>   s    z$Networking.setup.<locals>.<listcomp>zethtool zethtool --phy-statistics zethtool --show-priv-flags zethtool --show-eee ztc -s filter show dev z ingress)r   r   zethtool -e %szWARNING (about to collect '%s'): collecting an eeprom dump is known to cause certain NIC drivers (e.g. bnx2x/tg3) to interrupt device operation)zbridge -s -s -d link showzbridge -s -s -d -t fdb showzbridge -s -s -d -t mdb showzbridge -d vlan showr
   z/bin/traceroute -n %sd   priorityzip netnszip netns exec r   r   ziptables -VZ	nf_tables)cmdr   zip6tables -V)Zcmd_outputs)r   znamespaces/%s zip -d address showzip rule list2   )r#   subdirziptables-save)r   r'   r#   zip6tables-save)r   r'   r   zls -1 /sys/class/net/zethtool -i zethtool -k zethtool -S )superr   setupethtool_shortoptsZadd_cmd_tagsZadd_file_tagsadd_copy_specZadd_forbidden_pathadd_cmd_outputns_wideZ
path_isdirZcollect_cmd_output
splitlinesr   listdir
get_optionZ	_log_warn
trace_hostZget_network_namespacesZtest_predicateZexec_cmd)selfr   ZdevlinksZdevlinks_listZdevlinkZip_macsec_show_cmdZmacsec_predZss_cmdZss_predr$   Z
cmd_prefixr   coZco6Ziptables_with_nftZip6tables_with_nft	namespaceZ_subdirZns_cmd_prefixZnetns_netdev_list	__class__r   r   r)   +   s,  











	






zNetworking.setup)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesr1   r   strintZoption_listr-   r*   r)   __classcell__r   r   r5   r   r      s0    r   c                           e Zd ZdZ fddZ  ZS )RedHatNetworkingzrhn.redhat.comc                    sT   z| j j d }t|d d dk rd| _W n	 ty    Y nw tt|   d S )Nz	net-toolsversionr      z-T)	ZpolicyZpackage_managerZall_pkgsr;   r-   	Exceptionr(   r>   r)   )r2   Znetstat_pkgr5   r   r   r)     s   zRedHatNetworking.setupr7   r8   r9   r1   r)   r<   r   r   r5   r   r>          r>   c                       r=   )UbuntuNetworkingzarchive.ubuntu.comc                    sB   t t|   | g d | dr| jd| j dd d S d S )N)z/etc/resolvconfz/etc/network/interfacesz/etc/network/interfaces.dr   z/run/netplan/*.yamlz/etc/netplan/*.yamlz/lib/netplan/*.yamlz/run/systemd/networkr
   z/usr/sbin/traceroute -n %sr!   r"   )r(   rD   r)   r+   r0   r,   r1   )r2   r5   r   r   r)     s   

zUbuntuNetworking.setuprB   r   r   r5   r   rD     rC   rD   N)
Zsos.report.pluginsr   r   r   r   r   r   r   r>   rD   r   r   r   r   <module>   s
     s