U
    -_g6                     @   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ddddddgZdZ fddZd d! Zd"d# Zd$d% Z  ZS )&
Networkingz,Network and networking devices configurationZ
networking)ZnetworkZhardwaresystemzwww.example.com
tracerouteFzcollect a traceroute to )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-Wtcp_diagudp_diag	inet_diag	unix_diagnetlink_diagaf_packet_diagxsk_diagZacdgiklmPSTc                    s  t    | ddd | dddddd	d
ddddddddg | ddddddg | 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/d0d1d2d3d4d5d6d7d8g | d9r| d:d;d<d=d>d?d@dAg | dB}|dC dDkr|dE 	 }|D ] | dF  dG  dH  dI  g g }| dJ  }|dC dDkr*|dE 	 D ]$}|
dKr|| dL  q|  fdMdN|D  q*dO}t| dPgdQ}| j||dRdS |   |   d S )TNZbondZhosts)z/proc/net/bonding/bond.*z
/etc/hostsz/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/etc/nmstate/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_symlinkZtagszip route show table allZip_routeZiproute_show_table_allZ
plotnetcfgznetstat  -neopanetstat)r   z
nstat -zas
netstat -s -agnznetworkctl status -azip -6 route show table allzip -d route show cachezip -d -6 route show cachezip -4 rule listzip -6 rule listz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nmstatectl showz nmstatectl show --running-configz/sys/class/devlinkzdevlink dev param showzdevlink dev infozdevlink port showzdevlink sb showzdevlink sb pool showzdevlink sb port pool showzdevlink sb tc bind showzdevlink -s -v trap showzdevlink devZstatusr   outputzdevlink dev eswitch show zdevlink sb occupancy snapshot zdevlink sb occupancy show zdevlink -v resource show devlink dpipe table show name   c                    s   g | ]}d   d| qS )r$   z name  ).0ZdnameZdevlinkr'   ?/usr/lib/python3/dist-packages/sos/report/plugins/networking.py
<listcomp>   s   z$Networking.setup.<locals>.<listcomp>zip -s macsec showZmacseckmodsTpredZchanges)supersetupZadd_file_tagsadd_copy_specZadd_forbidden_pathadd_cmd_outputns_wideZ
path_isdirZcollect_cmd_output
splitlines
startswithappendsplitr   collect_ss_ip_ethtool_infocollect_bridge_info)selfZdevlinksZdevlinks_listZ
dev_tablesZdpipeZtablelnZip_macsec_show_cmdZmacsec_pred	__class__r)   r*   r1   /   s    


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 .*Zethool_Zethtoolr   Zip_neigh_showZ	ip_s_linkr   Znetstat_agnZ	netstat_s)zethtool [^-].*r!   r"   r    znetstat.*-neopaznetstat.*-agnr   N)ethtool_shortoptsZadd_cmd_tags)r;   optr'   r'   r*   add_command_tags   s    

 zNetworking.add_command_tagsc                 C   s   |  ddddg 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)r3   r;   r'   r'   r*   r:      s    zNetworking.collect_bridge_infoc                 C   s  d}t | | jddid}| j||dd dd | jD }| jd	d |D d
d | jddddddgd
d | drd}| d | j|d
d | dr| jd| j dd | d d}| | d| d}|rd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 ]4}| j
d% | }d&| }|| d' }| j| d(| d)| d*| d+| d,| d-| d.| d/| j d0| d1| d/| j d2| d3gd4|d5 | j|d6 g|	|d4d7 | j|d8 g|
|d4d7 |d }| j|||d9 | d:rH| j| d;| d<| d=| d>| d?g|d
 d4|d@ qH|   d$S )Az( Collect ss, ip and ethtool cmd outputs zss -peaonmir-   all)r-   ZrequiredTr.   c                 S   s   g | ]}d | qS )r>   r'   )r(   r@   r'   r'   r*   r+      s     z9Networking.collect_ss_ip_ethtool_info.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )z %(dev)sr'   )r(   Z_cmdr'   r'   r*   r+      s    Zethernet)devicesz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 -VZ	nf_tables)cmdr#   zip6tables -V)Zcmd_outputs)r/   r,   NZnamespaced_networkznamespaces/ z ip -d address showz ip route show table allz ip -s -s neigh showz ip -4 rule listz ip -6 rule listz ip vrf showz
 sysctl -az	 netstat r   z netstat -sr   z nstat -zas2   )rF   subdirziptables-save)r/   rJ   rF   zip6tables-save)r/   rJ   r   z ethtool %(dev)sz ethtool -i %(dev)sz ethtool -k %(dev)sz ethtool -S %(dev)sz ethtool -m %(dev)s)rD   rF   rJ   )r   ss_kmodsr3   r?   Zadd_device_cmdZ
get_optionZ	_log_warn
trace_hostZget_network_namespacesZtest_predicaterD   r4   rA   )r;   Zss_cmdZss_predZ_ecmdsrG   Z
cmd_prefixr   ZcoutZco6Ziptables_with_nftZip6tables_with_nft	namespaceZ_devsZ_subdirZns_cmd_prefixr'   r'   r*   r9      s    










   
z%Networking.collect_ss_ip_ethtool_info)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesrL   r   strintZoption_listr4   rK   r?   r1   rA   r:   r9   __classcell__r'   r'   r<   r*   r      s>     sr   c                       s(   e Zd ZdZ fddZdd Z  ZS )RedHatNetworkingzrhn.redhat.comc                    sP   z,| j jd}t|d d dk r*d| _W n tk
r@   Y nX t   d S )Nz	net-toolsversionr      z-T)policyZpackage_managerZpkg_by_namerR   r4   	Exceptionr0   r1   )r;   Znetstat_pkgr<   r'   r*   r1   +  s    
zRedHatNetworking.setupc                 C   s   |  ddd d S )Nz/etc/nmstatez3(\s+(mka-cak|private-key-password|psk|password):).*	\1 ******Zdo_path_regex_subrB   r'   r'   r*   postproc8  s
    zRedHatNetworking.postprocrN   rO   rP   rL   r1   r[   rS   r'   r'   r<   r*   rT   (  s   rT   c                       s(   e Zd ZdZ fddZdd Z  ZS )UbuntuNetworkingzarchive.ubuntu.comc              
      sR   ddddddddd	g	}| j  d
kr*|| _t   | ddddddddg d S )Nr   r   r   r   r   r   r   Z
mptcp_diagZ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)rW   Zdist_versionrK   r0   r1   r2   )r;   Zubuntu_jammy_and_after_ss_kmodsr<   r'   r*   r1   D  s,       
zUbuntuNetworking.setupc                 C   s   |  ddd d S )Nz/etc/netplanz(\s+password:).*rY   rZ   rB   r'   r'   r*   r[   \  s
    zUbuntuNetworking.postprocr\   r'   r'   r<   r*   r]   A  s   r]   N)
Zsos.report.pluginsr   r   r   r   r   r   r   rT   r]   r'   r'   r'   r*   <module>	   s
      