U
    -_gq                     @   s2   d dl Z d dlmZmZmZ G dd deeZdS )    N)PluginIndependentPlugin	PluginOptc                   @   sF   e Zd ZdZdZdZdZeddeddgZ	d	d
 Z
dd Zdd ZdS )Ebpfz	eBPF toolZebpf)systemZkernelZnetwork)Zbpftool
namespacesNz0Number of namespaces to collect, 0 for unlimited)defaultZval_typeZdescc              
   C   sz   g }zt |}W n: tk
rL } z| d|  | W Y S d}~X Y nX t|D ]\}}d|krV||d  qV|S )z! Collect the list of program IDs z"Couldn't parse bpftool prog list: Nidjsonloads	ExceptionZ	_log_info	enumerateappend)selfZ	prog_jsonoutZ	prog_dataerr_item r   9/usr/lib/python3/dist-packages/sos/report/plugins/ebpf.pyget_bpftool_prog_ids   s    zEbpf.get_bpftool_prog_idsc              
   C   sz   g }zt |}W n: tk
rL } z| d|  | W Y S d}~X Y nX t|D ]\}}d|krV||d  qV|S )z Collect the list of mapIDs z"Could not parse bpftool map list: Nr	   r
   )r   Zmap_jsonr   Zmap_datar   r   r   r   r   r   get_bpftool_map_ids&   s    zEbpf.get_bpftool_map_idsc           
      C   s   |  d}| |d D ]$}dD ]}| d| d|  q q|  d}| |d D ]}| d|  qV| dd	d
ddg d}| d}| j|dD ]}|| d }	| |	d  qd S )Nzbpftool -j prog listoutput)ZxlatedZjitedzbpftool prog dump z id zbpftool -j map listzbpftool map dump id zbpftool prog listzbpftool map listzbpftool cgroup treezbpftool net listzbpftool struct_ops dumpzip netns exec r   )Zns_max )Zcollect_cmd_outputr   Zadd_cmd_outputr   Z
get_optionZget_network_namespaces)
r   ZprogsZprog_idZdumpcmdmapsZmap_idZ
cmd_prefixZnsps	namespaceZns_cmd_prefixr   r   r   setup3   s&    


z
Ebpf.setup)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesZcommandsr   intZoption_listr   r   r   r   r   r   r   r      s   r   )r   Zsos.report.pluginsr   r   r   r   r   r   r   r   <module>	   s   