
    ([Qhp9                         d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
  G d de      Z G d dee      Z G d d	eee      Zy
)    )PluginRedHatPluginUbuntuPluginDebianPluginSoSPredicate	PluginOpt)UbuntuPolicy)DebianPolicyc            	            e Zd ZdZdZdZdZ eddde        ed	d
ed       edde	d       eddd       eddd      gZ
dZg dZdZ fdZd Zd Zd Z x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                 Z   t         
|           | j                  ddd       | j                  g d       | j	                  g d       | j                  ddd       | j                  d	d
d
dg       | j                  d       | j                  d| j                   dd       | j                  dddd| j                   ddddddddddddd d!d"d#d$d%d&g       | j                  d'      r| j                  g d(       | j                  d)      }|d*   d+k(  r|d,   j                         }|D ]  }| j                  d-| d.| d/| d0| g       g }| j                  d1|       }|d*   d+k(  sC|d,   j                         D ]6  }|j                  d2      s|j                  |j                         d3          8 | j                  |D cg c]
  }d1| d4|  c}        d5}t        | d6g7      }	| j                  ||	d89       | j                          | j                          y c c}w ):N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/etc/nmstate/z/var/lib/lldpad/)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tagszip route show table allip_routeiproute_show_table_all
plotnetcfgznetstat  -neopanetstat)r'   z
nstat -zas
netstat -sznetstat -s -6 -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/devlink)z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 devstatusr   outputzdevlink dev eswitch show zdevlink sb occupancy snapshot zdevlink sb occupancy show zdevlink -v resource show zdevlink dpipe table show name   z name 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
splitlines
startswithappendsplitr   collect_ss_ip_ethtool_infocollect_bridge_info)selfdevlinksdevlinks_listdevlink
dev_tablesdpipetablelndnameip_macsec_show_cmdmacsec_pred	__class__s             ?/usr/lib/python3/dist-packages/sos/report/plugins/networking.pyr>   zNetworking.setup1   s   (.!
 	
 	 
 	& 	 	!
 		 	Ly!* 	 	,5J",.F!G 	 	IL)ht||nG<)2 	 	4 	t||nE*"($'!%.-
 	2 ??/0 	! 	 ..}=H!Q& ( 2 = = ?, G''3G9=8	B4WI>3G9=	)  "$J 333G9=E X!+',X'A'A'C FG&11&9 * 1 1'--/!2D EF ++)3- % 8yugN- . 1"4z:.[$O'')  "-s   H(
c           
          | j                   D ]  }| j                  d| dd| i        | j                  dddddd	d
d       y)z% Command tags for ip/ethtool/netstat 	ethtool -z .*ethool_ethtoolr&   ip_neigh_show	ip_s_linkr-   netstat_agn	netstat_s)zethtool [^-].*r1   r2   r0   znetstat.*-neopaznetstat.*-agnr.   N)ethtool_shortoptsadd_cmd_tags)rL   opts     rW   add_command_tagszNetworking.add_command_tags   sh    )) 	CC5$uo 	
 	'&#2((*%
 	    c                 *    | j                  g d       y)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)rB   rL   s    rW   rK   zNetworking.collect_bridge_info   s     	 
 	rd   c                    d}t        | | j                  ddi      }| j                  ||d       | j                  d       | j                  D cg c]  }d| 	 }}| j	                  |D cg c]  }|d	z   	 c}d
       | j	                  g dd
       | j                  d      r&d}| j                  d       | j	                  |d
       | j                  d      r | j                  d| j                   d       | j                  d       d}| j                  | j                  d      | j                  d            }|rqddd}	ddd}
| j                  | t        | |	            rt        | dg      nd}| j                  | t        | |
            rt        | dg      nd}|D ]  }| j                  d    |   }d!| }||z   d"z   }| j                  | d#| d$| d%| d&| d'| d(| d)| d*| j                   d+| d,| d*| j                   d-| d.gd/|0       | j                  |d1z   g||d/2       | j                  |d3z   g||d/2       |dz   }| j                  |||4       | j                  d5      s| j	                  | d6| d7| d8| d9| d:g|d
   d/|;        | j                          yc c}w c c}w )<z( Collect ss, ip and ethtool cmd outputs zss -peaonmir9   all)r9   requiredTr:   zss -srY   z %(dev)sethernet)devices)zethtool %(dev)sz ethtool --phy-statistics %(dev)sz!ethtool --show-priv-flags %(dev)szethtool --show-eee %(dev)szethtool --show-fec %(dev)szethtool --show-ntuple %(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)cmdr4   zip6tables -V)cmd_outputs)r;   r8   N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   )rm   subdirziptables-save)r;   rt   rm   zip6tables-save)r;   rt   r   z ethtool %(dev)sz ethtool -i %(dev)sz ethtool -k %(dev)sz ethtool -S %(dev)sz ethtool -m %(dev)s)rk   rm   rt   )r   ss_kmodsrB   r`   add_device_cmd
get_option	_log_warn
trace_hostget_network_namespacestest_predicaterk   rC   rc   )rL   ss_cmdss_predrb   _ecmds_cmdro   
cmd_prefixr   coutco6iptables_with_nftip6tables_with_nft	namespace_devs_subdirns_cmd_prefixs                    rW   rJ   z%Networking.collect_ss_ip_ethtool_info   s   t4==)0%(8:F$?G$ 04/E/EFIcU#FF*0
"&D:
 	 	 	 	
  	 		 ??<(&CNN 8 9 Z8??<("5doo5F G),   .
 	J'%
00 34-/
  )K@D(K@C$($7$7&24T&J %8 %L ".d;-!H '+ 
 &*%8%8'3Dc'J &9 &L #/tK="I (, 
 ( +O	%9:9E'	{3 *Y 6 <##$o%89$o%=>$o%9:$o%56$o%56$o\2$oZ0$oYt||nGD$o[1$oYt||nEB$o[1% w $ 0 ##]_%D$E):+2-/ $ 1 ##]5E%E$F);+2-/ $ 1
 '6 ##F#I ??#78 ''(/)9:(/)<=(/)<=(/)<=(/)<=)  %Z02g ( OK+OZ 	A G
s   K-K)__name__
__module____qualname__
short_descplugin_nameprofilesry   r   strintoption_listrC   ru   r`   r>   rc   rK   rJ   __classcell__rV   s   @rW   r   r      s    ?JK0H"J 	,1*>	@%rC0	2 	,sI	K&$	& 	,C	EK  G>H
 &s#j"	j rd   r   c                   (     e Zd ZdZ fdZd Z xZS )RedHatNetworkingzrhn.redhat.comc                     	 | j                   j                  j                  d      }t        |d   d         dk  rd| _        t        |           y # t
        $ r Y w xY w)Nz	net-toolsversionr      z-T)policypackage_managerpkg_by_namer   rC   	Exceptionr=   r>   )rL   netstat_pkgrV   s     rW   r>   zRedHatNetworking.setup2  s_    	++55AA+NK;y)!,-1#
 		  		s   A A 	AAc                 *    | j                  ddd       y )Nz/etc/nmstatez3(\s+(mka-cak|private-key-password|psk|password):).*	\1 ******do_path_regex_subrf   s    rW   postproczRedHatNetworking.postproc?  s    B	
rd   r   r   r   ry   r>   r   r   r   s   @rW   r   r   /  s    !J
rd   r   c                   (     e Zd ZdZ fdZd Z xZS )UbuntuNetworkingzarchive.ubuntu.comc                    g d}t        | j                  t              r)| j                  j                         dk\  r|dgz   | _        nBt        | j                  t
              r(| j                  j                         dk\  r|dgz   | _        t        |           | j                  g d       | j                  g d       y )N)r   r   
mptcp_diagr   raw_diagr   r   r   g
ףp=
6@r       
vsock_diag)z/etc/netplan/*.yamlz/etc/network/interfacesz/etc/network/interfaces.dr%   z/etc/resolvconfz/lib/netplan/*.yamlz/run/netplan/*.yamlz/run/systemd/network)/etc/netplanz/lib/netplanz/run/netplan)

isinstancer   r	   dist_versionru   r
   r=   r>   r@   add_dir_listing)rL   common_ss_kmodsrV   s     rW   r>   zUbuntuNetworking.setupK  s    ( t{{L1((*e3+zl:DMl3((*b0+|n<DM 	
 		 	 
 	rd   c                 *    | j                  ddd       y )Nr   z(\s+password:).*r   r   rf   s    rW   r   zUbuntuNetworking.postprocm  s    	
rd   r   r   s   @rW   r   r   H  s    %J D
rd   r   N)sos.report.pluginsr   r   r   r   r   r   sos.policies.distros.ubuntur	   sos.policies.distros.debianr
   r   r   r    rd   rW   <module>r      sD   G G 4 4]  ] @	
z< 
2+
z< +
rd   