
    -_gE                     x    d dl mZ d dlZd dlmZmZmZmZ  G d de      Z G d dee      Z	 G d d	eee      Z
y)
    )environN)PluginRedHatPluginDebianPluginUbuntuPluginc                   T    e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	 Zd
 Zd Zd Zd Zd Zy)OpenVSwitchzOpenVSwitch networkingopenvswitch)networkvirtz
ovs-appctlz	ovs-vsctlz	ovs-ofctlz	ovs-dpctlFc           	      	     j                  d      }ddg} j                   j                   d      }|d   dk(  xr |d   j                  d       _        t         fd	d
D               _        t        j                  d      r$|j                  t        j                  d             |s0 j                  |D cg c]  } j                  |d       c}       n j                  |        j                  g d        j                   j                  dd       j                  dd       j                  dd      g       t        j                  d      }|r! j                   j                  |d              j                  ddd        j                  g d        j                  g ddddddd j                   d j                   d j                   d  j                   d! j                   d" j                   d# j                   d$ j                   d% j                   d& j                   d' j                   d( j                   d) j                   d* j                   d+ j                   d, j                   d- j                   d. j                   d/ j                   d0 j                   d1 j                   d2 j                   d3 j                    d4 j                    d5 j                   d6 j                   d7 j                   d8 j                   d9 j                   d: j                   d; j                   d< j                   d=        j                   j                   d>d?@        j                   j                   dAdB@        j#                  dCD        j#                  dED        j#                  dFD        j#                  dGD        j#                  dHD        j#                  dID        j%                           j'                           j)                          y c c}w )JNall_logsz/var/log/openvswitch/z/usr/local/var/log/openvswitch/z/ -t 5 get Open_vSwitch . other_config:dpdk-initstatusr   outputz"true"c              3   @   K   | ]  }j                  |        y w)N)is_installed).0pselfs     @/usr/lib/python3/dist-packages/sos/report/plugins/openvswitch.py	<genexpr>z$OpenVSwitch.setup.<locals>.<genexpr>)   s"      Ft003 Fs   )z6windgate-fpnuage-openvswitch
OVS_LOGDIRz*.log)z!/run/openvswitch/ovsdb-server.pidz!/run/openvswitch/ovs-vswitchd.pidz&/run/openvswitch/ovs-monitor-ipsec.pidz/usr/local/etc/openvswitchzconf.dbz/etc/openvswitchz/var/lib/openvswitch	OVS_DBDIRopenvswitch_daemon_logopenvswitch_server_log)z%/var/log/openvswitch/ovs-vswitchd.logz%/var/log/openvswitch/ovsdb-server.log)z/run/openvswitchz/dev/hugepages/z	/dev/vfioz/var/lib/vhost_socketszdpdk_nic_bind --statuszdpdk-devbind.py --statuszdriverctl list-deviceszdriverctl -v list-deviceszdriverctl list-overrideszdriverctl -v list-overrideszdriverctl list-persistedz
 bond/listz
 bond/showz
 lacp/showz lacp/show-statsz coverage/showz ovs/route/showz tnl/arp/showz tnl/ports/show -v upcall/showz -t 5 list Open_vSwitchz -t 5 list interfacez -t 5 list bridgez -t 5 list datapathz! dpif-netdev/pmd-rxq-show -secs 5z" dpif-netdev/pmd-rxq-show -secs 30z dpif-netdev/pmd-rxq-showz dpif-netdev/pmd-stats-showz dpif-netdev/pmd-perf-showz ofproto/list-tunnelsz" -t ovs-monitor-ipsec tunnels/showz  -t ovs-monitor-ipsec xfrm/statez# -t ovs-monitor-ipsec xfrm/policiesz$ dump-flows --name -m type=offloadedz dump-flows --name -m type=ovsz% dpif-netdev/subtable-lookup-prio-getz dpif-netdev/dpif-impl-getz  dpif-netdev/miniflow-parser-getz dpif-netdev/pmd-sleep-showz dpdk/lcore-listz dpdk/log-listz dpdk/get-malloc-statsz netdev-dpdk/get-mempool-infoz% -t 5 get Open_vSwitch . other_configopenvswitch_other_config)tagsz
 -t 5 showovs_vsctl_showr
   unitszopenvswitch-nonetworkzovs-vswitchdzovsdb-serverzovs-configurationzopenvswitch-ipsec)
get_optioncollect_cmd_outputvctl
startswith
check_dpdkanycheck_6windr   getappendadd_copy_spec	path_joinadd_file_tagsadd_dir_listingadd_cmd_outputactldpctladd_journalcollect_ovs_infocollect_datapathcollect_ovs_bridge_info)r   r   log_dirsdpdk_enabledld	ovs_dbdirs   `     r   setupzOpenVSwitch.setup   s   ??:. $-

 ..yykHIK'1Q6 G'1<<XF 	 FDF F ;;|$OOGKK566> 02r7+   x( 
 	 	NN7CNN-y9NN19=
 	
 KK,	t~~iCD((	
 	 	 
 	 	 B
$B
 'B
 %	B

 (B
 'B
 *B
 'B
 yyk$B
 yyk$B
 yyk$B
 yyk)*B
" yyk(#B
& yyk)'B
* yyk'+B
. yyk+,/B
2 yyk&3B
6 yyk017B
: yyk-.;B
> yyk*+?B
B yyk,-CB
F yyk:;GB
H yyk;<IB
J yyk23KB
N yyk45OB
R yyk34SB
V yyk./WB
Z yyk;<[B
\ yyk9:]B
^ yyk<=_B
b zzl>?cB
f zzl89gB
j yyk>?kB
n yyk34oB
r yyk9:sB
v yyk45wB
z yyk)*{B
| yyk(}B
~ yyk/0B
B yyk67CB
 B	H 	yyk>?+ 	 	-
 	tyyk4!1 	 	3 	}-67~.~.2323$$&q s   ;Q?c                 Z   g d}| j                   r| j                  |       | j                  dddddddd	d
| j                   d| j                   dd| j                   dd| j                   dddddddd| j                   dg       | j                  d       dD ]  }| j                  d| g        | j                  d      }|d   dk(  rX|d    j                         D ]A  }t        j                  d!|      }|s|j                  d"      }| j                  d#| g       C y$y$y$)%z  Collect output of OVS commands )z?/etc/systemd/system/multi-user.target.wants/openvswitch.servicez./etc/sysctl.d/60-6wind-system-auto-reboot.confz/etc/openvswitch/system-id.confz/etc/openvswitch/*.dbz*/etc/ld.so.conf.d/linux-fp-sync-fptun.confz$/etc/NetworkManager/conf.d/fpn0.confz/etc/default/openvswitchz/etc/logrotate.d/openvswitchz/etc/linux-fp-sync.envz/etc/fp-daemons.envz/etc/fp-vdev.iniz/etc/fpm.envz/etc/6WINDGate/fp.configz/etc/6WINDGate/fpnsdk.configz/etc/dms.d/fp-dms.confz/etc/dms.d/fpmd-dms.confz/etc/dms.d/fpsd-dms.confz/etc/fast-path.envz/etc/fps-fp.envzfp-cli fp-vswitch-statszfp-cli dpdk-core-port-mappingzfp-cpu-usagezfp-cli fp-vswitch-maskszfp-cli fp-vswitch-flowszfp-shmem-dpvizfp-cli stats non-zerozfp-cli statszfp-cli dpdk-cp-filter-budgetz vm/port-detailed-showr   zfp-cli nfct4z vm/port-vip-list-showzfp-shmem-ports -sz show -szfpcmd fp-vswitch-flowszfp-cli fp-vswitch-ports percorezfp-cli dpdk-debug-poolzfp-cli dump-sizezfp-cli conf runtimezfp-cli conf compiledzfp-cli ifacez memory/showzvirtual-acceleratorr!   )filtermanglerawnatzfpcmd nf4-rules zfp-cli fp-vswitch-portsr   r   r   z^([\d]+):[\s]+([^\s]+)   zfp-cli dpdk-cp-filter-budget N)r)   r,   r0   r1   r2   r3   r$   
splitlinesrematchgroup)r   files_6windtable	port_listportmport	port_names          r   r4   zOpenVSwitch.collect_ovs_info   sw   
, {+)/))'.99+3499+\*99+34#::,h'(1("%&99+\*1! 4 #89; B##'7w%?$@AB
 //0IJI"a'%h/::< DHH%>EE$)KKN	++;I;G- 	 (G     c           
      D   | j                  | j                   d      }|d   dk(  rz|d   j                         D ]c  }| j                  | j                   d| | j                   d| | j                   d| | j                   d| | j                   d	| g       e y
y
)z3 Gather the datapath information for each datapath z dpctl/dump-dpsr   r   r   z dpctl/show -s z dpctl/dump-flows -m z dpctl/dump-conntrack -m z dpctl/ct-stats-show -m z dpctl/ipf-get-status N)r$   r1   rB   r0   )r   dp_list_resultdpss      r   r5   zOpenVSwitch.collect_datapath   s    00DII;o1NO(#q(%h/::< ##yyk6yyk!6se<yyk!:3%@yyk!9#?yyk!7u=%  )rL   c                    | j                  | j                   d      }|d   dk7  ry|d   j                         D ]G  }| j                  | j                   d| | j                   d| | j                   d| | j                   d	| | j                   d
| | j
                   d| | j
                   d| | j
                   d| | j
                   d| | j
                   d| | j
                   d| | j
                   d| g       | j                  |       | j                  |       | j                  r`| j                  | j                   d|       }|d   dk(  r8|d   j                         D ]"  }| j                  | j                   d|        $ | j                  sq| j                  | j                   d| | j                   d| | j                   d| | j                   d| | j                   d| g       | j                  | j                   d|       }|d   dk(  r>|d   j                         dd }|D ]#  }| j                  | j                   d| g       % | j                  | j                   d|       }|d   dk(  sb|d   j                         dd }	|	D ]  }
| j                  | j                   d|
 | j                   d|
 | j                   d| d |
 | j                   d!| d |
 | j                   d"| d |
 | j                   d#| d |
 | j                   d$| d |
 | j                   d%| d |
 | j                   d&| d |
 | j                   d'| d |
 g
        J y)(z; Gather additional output for each OVS bridge on the host. z -t 5 list-brr   r   Nr   z# bridge/dump-flows --offload-stats z dpif/show-dp-features z
 fdb/show z fdb/stats-show z
 mdb/show  dump-flows  dump-ports-desc z dump-ports z queue-get-config z queue-stats  show  dump-groups z -t 5 list-ifaces  netdev-dpdk/get-mempool-info z evpn/vip-list-show z  bridge/dump-conntracks-summary z! bridge/acl-table ingress/egress z bridge/acl-table z ofproto/show z
 vrf/list    z vrf/route-table z evpn/list z evpn/mac-table z evpn/arp-table z evpn/dump-flows  z evpn/dhcp-pool-show z evpn/dhcp-relay-show z evpn/dhcp-static-show z evpn/dhcp-table-show z evpn/proxy-arp-filter-list z evpn/show z port/dscp-table )r$   r%   rB   r0   r1   ofctlget_flow_versionsget_port_listr'   exec_cmdr)   split)r   br_list_resultbriiface_list_resultifacevrf_listvrfsvrf	evpn_listevpnsevpns              r   r6   z#OpenVSwitch.collect_ovs_bridge_info   s,    00DII;m1LM(#q(!(+668 @	C99+@F99+4SE:99+Zu-99+-cU399+Zu-::,l3%0::,/u5::,l3%0::,06::,mC51::,fSE*::,mC51!  ""3's#$(MMyyk!3C59%! %X.!3!28!<!G!G!I ++#yyk)GwO ##yyk!5cU;yyk!A#Gyyk!B3%Hyyk!3C59yyku5%   22yykC513H%*#H-335ab9D# ++#yyk):3%@- 
 !33yykSE24	X&!+%h/557;E % ++#yyk)9$@#yyk)9$@#yyk):3%qG#yyk)>se1TFK#yyk)?uAdVL#yyk)@QtfM#yyk)?uAdVL#yyk)E"e1TF,#yykSE4&A#yyk):3%qG- g@	rL   c                    g d}ddddddd}| j                  | j                   d	      }| j                  | j                   d
|       }g }|d   j                         D ]N  }d|v s||j                  d      dz   |j                  d       }|j	                  dd      j                  d      }P |dgk(  r|d   r|d   j                         }	g }
|	D ]U  }d|v s|j                  d      }|d   j                  d      }t        t        |d   d      t        |d   d      dz         }
W |
D ]  }||v s|j                  ||           |D ]  }||v s| j                  | j                   d| d| | j                   d| d| | j                   d| d| | j                   d| d| | j                   d| d| | j                   d| d| g        y) z* Collect flow version of the given bridge )
OpenFlow10
OpenFlow11
OpenFlow12
OpenFlow13
OpenFlow14
OpenFlow15rh   ri   rj   rk   rl   rm   )rV   rA               z -t 5 --versionz -t 5 list bridge r   	protocols[rV   ]" z, zOpenFlow versionszOpenFlow versions :r      z -O rS   rT   z dump-group-stats rQ   z dump-tlv-map rR   N)r$   r%   rB   findreplacer\   rangeintr+   r0   rX   )r   bridgeflow_versionsofp_versionsofp_ver_resultbr_info	br_protoslinebr_protos_lnofp_version_range	ver_rangever_spverprotocolflows                  r   rY   zOpenVSwitch.get_flow_versionsE  sH   
 
 00DII;o1NO ))yyk+F846 	H%002 	FDd"#DIIcN1$4TYYs^D(00b9??E		F !9 .x 8 C C EI) 9&$.!ZZ(<=F )//#.C %c#a&"o&)#a&"oa&7!9I	9 & =|+$$\(%;<=
 " 		Dy ##zzl$tfF6(;zzl$tfM&Bzzl$tf,>vhGzzl$tfLAzzl$tfN6(Czzl$tf,=fXF% 		rL   c           
         | j                  | j                   d|       }|d   dk(  r|d   j                         D ]  }| j                  | j                   d| | j                   d| | j                   d| | j                   d| d	g       | j
                  sb| j                  | j                   d
|         yy)z' Collect port list of the given bridge z -t 5 list-ports r   r   r   z
 cfm/show z
 qos/show z bond/show z get Interface z optionsrU   N)r[   r%   rB   r0   r1   r'   )r   r}   port_list_resultrI   s       r   rZ   zOpenVSwitch.get_port_list  s    ==yyk*6(35 H%*(2==? L##yykD62yykD62 yykTF3yykh?%  ??''99+%CD6JLL +rL   N)__name__
__module____qualname__
short_descplugin_nameprofilesr1   r%   rX   r2   r'   r)   r;   r4   r5   r6   rY   rZ    rL   r   r	   r	      sU    )JK"HDDEEJKL'\CJGR=~LrL   r	   c                       e Zd ZdZy)RedHatOpenVSwitch)r
   zopenvswitch[2-9].*zopenvswitch-dpdkznuage-openvswitch6windgate-fpN)r   r   r   packagesr   rL   r   r   r     s	     HrL   r   c                   &     e Zd ZdZdZ fdZ xZS )DebianOpenVSwitch)zopenvswitch-switchr   )zD/var/snap/openstack-hypervisor/common/etc/openvswitch/system-id.confc                 J   | j                  d      rd| _        | j                   | j                   | _        | j                   | j                   | _        | j                   | j                   | _        | j                   | j
                   | _        t        |           y )Nzopenstack-hypervisorzopenstack-hypervisor.)r   ovs_cmd_prer1   r%   rX   r2   superr;   )r   	__class__s    r   r;   zDebianOpenVSwitch.setup  s    346D++,TYYK8DI++,TYYK8DI ,,-djj\:DJ ,,-djj\:DJrL   )r   r   r   r   filesr;   __classcell__)r   s   @r   r   r     s    :HE rL   r   )osr   rC   sos.report.pluginsr   r   r   r   r	   r   r   r   rL   r   <module>r      sB     	 O OGL& GLT \  \< rL   