o
    O6ufq  ã                   @   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 toolÚebpf)ÚsystemÚkernelÚnetwork)ÚbpftoolÚ
namespacesNz0Number of namespaces to collect, 0 for unlimited)ÚdefaultÚval_typeÚdescc              
   C   óx   g }zt  |¡}W n ty% } z|  d|› �¡ |W  Y d}~S d}~ww t|ƒD ]\}}d|v r9| |d ¡ q*|S )z! Collect the list of program IDs z"Couldn't parse bpftool prog list: NÚid©ÚjsonÚloadsÚ	ExceptionÚ	_log_infoÚ	enumerateÚappend)ÚselfÚ	prog_jsonÚoutÚ	prog_dataÚerrÚ_Úitem© r   ú9/usr/lib/python3/dist-packages/sos/report/plugins/ebpf.pyÚget_bpftool_prog_ids   ó   €þ€zEbpf.get_bpftool_prog_idsc              
   C   r   )z Collect the list of mapIDs z"Could not parse bpftool map list: Nr   r   )r   Úmap_jsonr   Úmap_datar   r   r   r   r   r    Úget_bpftool_map_ids&   r"   zEbpf.get_bpftool_map_idsc           
      C   s¸   |   d¡}|  |d ¡D ]}dD ]}|  d|› d|› �¡ qq|   d¡}|  |d ¡D ]
}|  d|› �¡ q+|  g d¢¡ d	}|  d
¡}| j|d�D ]}|| d }	|  |	d ¡ qJd S )Nzbpftool -j prog listÚoutput)ÚxlatedÚjitedzbpftool prog dump z id zbpftool -j map listzbpftool map dump id )zbpftool prog listzbpftool map listzbpftool cgroup treeúbpftool net listzbpftool struct_ops dumpzip netns exec r   )Úns_maxú r)   )Úcollect_cmd_outputr!   Úadd_cmd_outputr%   Ú
get_optionÚget_network_namespaces)
r   ÚprogsÚprog_idÚdumpcmdÚmapsÚmap_idÚ
cmd_prefixÚnspsÚ	namespaceÚns_cmd_prefixr   r   r    Úsetup3   s"   

ÿÿ

þz
Ebpf.setup)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚcommandsr   ÚintÚoption_listr!   r%   r9   r   r   r   r    r      s    ÿÿr   )r   Úsos.report.pluginsr   r   r   r   r   r   r   r    Ú<module>   s   