o
    G%@iE                     @   sf   d dl mZ d dlZd dl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 )
    )environN)PluginRedHatPluginDebianPluginUbuntuPluginc                   @   s`   e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	d
 Zdd Zdd Zdd Zdd Zdd ZdS )OpenVSwitchzOpenVSwitch networkingopenvswitch)networkvirtz
ovs-appctlz	ovs-vsctlz	ovs-ofctlz	ovs-dpctlFc                    sP    d}ddg}  j d}|d dko|d d _t fd	d
dD  _tdr9|	td |sH 
 fdd|D  n 
|  
g d  
 dd dd ddg td}|rx 
 |d  ddd  g d  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 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 d> j d? j d@  j j dAdBdC  j j dDdEdC  jdFdG  jdHdG  jdIdG  jdJdG  jdKdG  jdLdG          d S )MN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   s    | ]}  |V  qd S )N)is_installed).0pself @/usr/lib/python3/dist-packages/sos/report/plugins/openvswitch.py	<genexpr>)   s    z$OpenVSwitch.setup.<locals>.<genexpr>)z6windgate-fpnuage-openvswitch
OVS_LOGDIRc                    s   g | ]}  |d qS )z*.log)	path_join)r   ldr   r   r   
<listcomp>0   s    z%OpenVSwitch.setup.<locals>.<listcomp>)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 managerz -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_specr   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	ovs_dbdirr   r   r   setup   s  























!
#
%
&
'
)
+
-
/
0
1
3
5
7
9
;
=
?
@
A
CF
zOpenVSwitch.setupc                 C   s   g d}| j rz| | | 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D ]}| d| g qD| d}|d dkr||d   D ]}t	d!|}|ry|
d"}| d#| g qad$S d$S d$S )%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_namer   r   r   r4      sX   







#zOpenVSwitch.collect_ovs_infoc              
   C   s   |  | j d}|d dkr@|d  D ],}| | j d| | j d| | j d| | j d| | j d	| g qd
S d
S )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   r@   r0   )r   dp_list_resultdpsr   r   r   r5      s   zOpenVSwitch.collect_datapathc                 C   s
  |  | j d}|d dkrdS |d  D ]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r| 	| j d| }|d dkr|d  D ]}| | j d|  q| j
r| | j d| | j d| | j d| | j d| | j d| g |  | j d| }|d dkr|d  dd }|D ]}| | j d| g q|  | j d| }|d dkr|d  dd }	|	D ]f}
| | 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
 qqdS )(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&   r@   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evpnr   r   r   r6      s   


z#OpenVSwitch.collect_ovs_bridge_infoc                 C   s  g d}ddddddd}|  | j d	}|  | j d
| }g }|d  D ]}d|v rF||dd |d }|ddd}q)|dgkr|d r|d  }	g }
|	D ]#}d|v r}|d}|d d}tt|d dt|d dd }
qZ|
D ]}||v r|||  q|D ][}||v r| 	| 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 qd!S )"z* Collect flow version of the given bridge )
OpenFlow10
OpenFlow11
OpenFlow12
OpenFlow13
OpenFlow14
OpenFlow15rb   rc   rd   re   rf   rg   )rQ   r?               z -t 5 --versionz -t 5 list bridge r   	protocols[rQ   ]" z, zOpenFlow versionszOpenFlow versions :r      z -O rN   rO   z dump-group-stats rL   z dump-tlv-map rM   z dump-meters z meter-stats N)r%   r&   r@   findreplacerW   rangeintr,   r0   rS   )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flowr   r   r   rT   G  s^   	
zOpenVSwitch.get_flow_versionsc              
   C   s   |  | j d| }|d dkrJ|d  D ]4}| | j d| | j d| | j d| | j d| d	g | jrI| | j d
|  qdS dS )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 optionsrP   N)rV   r&   r@   r0   r1   r(   )r   rw   port_list_resultrG   r   r   r   rU     s$   
zOpenVSwitch.get_port_listN)__name__
__module____qualname__
short_descplugin_nameprofilesr1   r&   rS   r2   r(   r*   r:   r4   r5   r6   rT   rU   r   r   r   r   r      s"     EIAr   c                   @   s   e Zd ZdZdS )RedHatOpenVSwitch)r   zopenvswitch[2-9].*zopenvswitch-dpdkznuage-openvswitch6windgate-fpN)r   r   r   packagesr   r   r   r   r     s    r   c                       s$   e Zd ZdZdZ fddZ  ZS )DebianOpenVSwitch)zopenvswitch-switchr   )zD/var/snap/openstack-hypervisor/common/etc/openvswitch/system-id.confc                    sf   |  dr,d| _| j | j | _| j | j | _| j | j | _| j | j | _t   d S )Nzopenstack-hypervisorzopenstack-hypervisor.)r   ovs_cmd_prer1   r&   rS   r2   superr:   r   	__class__r   r   r:     s   
zDebianOpenVSwitch.setup)r   r   r   r   filesr:   __classcell__r   r   r   r   r     s    r   )osr   rA   sos.report.pluginsr   r   r   r   r   r   r   r   r   r   r   <module>   s   
   