U
    -Ų_gE  ć                   @   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)ZnetworkZvirtz
ovs-appctlz	ovs-vsctlz	ovs-ofctlz	ovs-dpctlFc              *      sü     d”}ddg}   j d”}|d dko<|d  d” _t fd	d
dD  _t d”rr| 	t d”” |s  
 fdd|D ” n
  
|”   
dddg”   
  dd”  dd”  dd”g” t d”}|rņ  
  |d””   ddd”   ddd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 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 dA j dB j dC j dDg'”  j j dEdFdG  j j dHdIdG  jdJdK  jdLdK  jdMdK  jdNdK  jdOdK  jdPdK   ”    ”    ”  d S )QNŚ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-openvswitchZ
OVS_LOGDIRc                    s   g | ]}   |d ”qS )z*.log)Ś	path_join)r   Z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/openvswitchZ	OVS_DBDIRZopenvswitch_daemon_logZopenvswitch_server_log)z%/var/log/openvswitch/ovs-vswitchd.logz%/var/log/openvswitch/ovsdb-server.logz/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_configZopenvswitch_other_config)Ztagsz
 -t 5 showZovs_vsctl_showr   ©Zunitszopenvswitch-nonetworkzovs-vswitchdzovsdb-serverzovs-configurationzopenvswitch-ipsec)Z
get_optionŚcollect_cmd_outputŚvctlŚ
startswithŚ
check_dpdkŚanyŚcheck_6windr   ŚgetŚappendŚadd_copy_specr   Zadd_file_tagsZadd_dir_listingŚadd_cmd_outputŚactlŚdpctlŚadd_journalŚcollect_ovs_infoŚcollect_datapathŚcollect_ovs_bridge_info)r   r	   Zlog_dirsZdpdk_enabledZ	ovs_dbdirr   r   r   Śsetup   sČ    
ž
’’’

’

ż


ż
üü































æD
ž’zOpenVSwitch.setupc                 C   s  ddddddddd	d
dddddddddg}| j r|  |” |  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” q¬|  d/”}|d0 d1kr|d2  ” D ]0}t 	d3|”}|rč| 
d4”}|  d5| g” qčd6S )7z  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   )ŚfilterZmangleŚrawZ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!   r"   r#   r$   r%   r   Ś
splitlinesŚreŚmatchŚgroup)r   Zfiles_6windŚtableZ	port_listŚportZmportZ	port_namer   r   r   r&   Ŗ   sv    ķ





č

’zOpenVSwitch.collect_ovs_infoc              
   C   s   |   | j d”}|d dkr|d  ” D ]T}|  | j d| | j d| | j d| | j d| | j d	| g” q*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   r#   r-   r"   )r   Zdp_list_resultZdpsr   r   r   r'   ļ   s    ūzOpenVSwitch.collect_datapathc                 C   s  |   | j d”}|d dkr"dS |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| g” |  |” |  |” | jrP|  	| j d| ”}|d dkrP|d  ” D ]}|  | j d| ” q2| 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 ]Ģ}
|  | 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-   r"   r#   ŚofctlŚget_flow_versionsŚget_port_listr   Śexec_cmdr   Śsplit)r   Zbr_list_resultZbriZiface_list_resultZifaceZvrf_listZvrfsZvrfZ	evpn_listZevpnsZevpnr   r   r   r(   ü   s    ō

’’ū’’
’õz#OpenVSwitch.collect_ovs_bridge_infoc                 C   sČ  ddddddg}ddddddd}|   | j d”}|   | j d	| ”}g }|d
  ” D ]:}d|krZ|| d”d | d” }| dd” d”}qZ|dgkr,|d
 r,|d
  ” }	g }
|	D ]F}d|krĄ| d”}|d  d”}tt|d dt|d dd }
qĄ|
D ]}||kr| || ” q|D ]}||kr0|  	| j
 d| d| | j
 d| d| | j
 d| d| | j
 d| d| | j
 d| d| | j
 d| d| g” q0dS )z* Collect flow version of the given bridge Z
OpenFlow10Z
OpenFlow11Z
OpenFlow12Z
OpenFlow13Z
OpenFlow14Z
OpenFlow15)r8   r,   é   é   é   é   z -t 5 --versionz -t 5 list bridge r   Z	protocolsś[r8   ś]ś"Ś z, zOpenFlow versionszOpenFlow versions ś:r   é   z -O r5   r6   z dump-group-stats r3   z dump-tlv-map r4   N)r   r   r-   ŚfindŚreplacer>   ŚrangeŚintr    r"   r:   )r   ŚbridgeZflow_versionsZofp_versionsZofp_ver_resultZbr_infoZ	br_protosŚlineZbr_protos_lnZofp_version_rangeZ	ver_rangeZver_spZverZprotocolZflowr   r   r   r;   E  s\    śś	’
’

śzOpenVSwitch.get_flow_versionsc              
   C   s   |   | j d| ”}|d dkr|d  ” D ]d}|  | j d| | j d| | j d| | j d| d	g” | jr.|  | j d
| ” q.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 optionsr7   N)r=   r   r-   r"   r#   r   )r   rM   Zport_list_resultr2   r   r   r   r<     s    ’ł
’zOpenVSwitch.get_port_listN)Ś__name__Ś
__module__Ś__qualname__Z
short_descZplugin_nameZprofilesr#   r   r:   r$   r   r   r)   r&   r'   r(   r;   r<   r   r   r   r   r      s     EI?r   c                   @   s   e Zd ZdZdS )ŚRedHatOpenVSwitch)r   zopenvswitch[2-9].*zopenvswitch-dpdkznuage-openvswitch6windgate-fpN)rO   rP   rQ   Śpackagesr   r   r   r   rR     s   rR   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”rXd| _| j | j | _| j | j | _| j | j | _| j | j | _t  ”  d S )Nzopenstack-hypervisorzopenstack-hypervisor.)r   Zovs_cmd_prer#   r   r:   r$   Śsuperr)   r   ©Ś	__class__r   r   r)   ©  s    
zDebianOpenVSwitch.setup)rO   rP   rQ   rS   Śfilesr)   Ś__classcell__r   r   rV   r   rT   ”  s   rT   )Śosr   r.   Zsos.report.pluginsr   r   r   r   r   rR   rT   r   r   r   r   Ś<module>   s      