o
    O6uf<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)ÚnetworkÚvirtz
ovs-appctlz	ovs-vsctlz	ovs-ofctlz	ovs-dpctlFc                    sF  ˆ   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‘d‘d‘d‘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› 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ˆ j› dC�dDdE� ˆ jˆ j› dF�dGdE� ˆ jdHdI� ˆ jdJdI� ˆ jdKdI� ˆ jdLdI� ˆ jdMdI� ˆ jdNdI� ˆ  ¡  ˆ  ¡  ˆ  ¡  d S )ONÚ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.logzls -laZ /run/openvswitchzls -laZ /dev/hugepages/zls -laZ /dev/vfiozls -laZ /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_specr   Úadd_file_tagsÚ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Ð
2Î
3Í
4Ì
6Ê
8È
:Æ
<Ä
>Â
@À
B¾
C½
D¼
FºI
þÿ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-   r/   r0   r1   r2   r%   Ú
splitlinesÚreÚmatchÚgroup)r   Úfiles_6windÚtableÚ	port_listÚportÚmportÚ	port_namer   r   r   r3   ¨   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%   r0   r?   r/   )r   Údp_list_resultÚdpsr   r   r   r4   í   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?   r/   r0   Ú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   r5   ú   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 ]G}||v r×|  	| j
› d|› d|› �| j
› d|› d|› �| j
› d|› d|› �| j
› d|› d|› �| j
› d|› d|› �| j
› d|› d|› �g¡ q�dS ) z* Collect flow version of the given bridge )Ú
OpenFlow10Ú
OpenFlow11Ú
OpenFlow12Ú
OpenFlow13Ú
OpenFlow14Ú
OpenFlow15ra   rb   rc   rd   re   rf   )rP   r>   é   é   é   é   z -t 5 --versionz -t 5 list bridge r   Ú	protocolsú[rP   ú]ú"Ú z, zOpenFlow versionszOpenFlow versions ú:r   é   z -O rM   rN   z dump-group-stats rK   z dump-tlv-map rL   N)r%   r&   r?   ÚfindÚreplacerV   ÚrangeÚintr,   r/   rR   )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   rS   C  sZ   ú	ÿ€
ÿ€€ú€þ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 optionsrO   N)rU   r&   r?   r/   r0   r(   )r   rv   Úport_list_resultrF   r   r   r   rT   ‚  s$   ÿù
ÿ€ózOpenVSwitch.get_port_listN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesr0   r&   rR   r1   r(   r*   r9   r3   r4   r5   rS   rT   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)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_prer0   r&   rR   r1   Úsuperr9   r   ©Ú	__class__r   r   r9   §  s   
zDebianOpenVSwitch.setup)r…   r†   r‡   rŒ   Úfilesr9   Ú__classcell__r   r   r�   r   r�   Ÿ  s    r�   )Úosr   r@   Úsos.report.pluginsr   r   r   r   r   r‹   r�   r   r   r   r   Ú<module>   s   
   