
    -_gq                     8    d dl Z d dlmZmZmZ  G d dee      Zy)    N)PluginIndependentPlugin	PluginOptc                   H    e Zd ZdZdZdZdZ edded      gZ	d	 Z
d
 Zd Zy)Ebpfz	eBPF toolebpf)systemkernelnetwork)bpftool
namespacesNz0Number of namespaces to collect, 0 for unlimited)defaultval_typedescc                     g }	 t        j                  |      }t	        |      D ]  \  }}d|v s|j                  |d            |S # t        $ r }| j                  d|        |cY d}~S d}~ww xY w)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_items          9/usr/lib/python3/dist-packages/sos/report/plugins/ebpf.pyget_bpftool_prog_idszEbpf.get_bpftool_prog_ids   s}    	

9-I !+ 	'GAtt|

4:&	' 
  	NN?uEFJ	   A 	A0A+%A0+A0c                     g }	 t        j                  |      }t	        |      D ]  \  }}d|v s|j                  |d            |S # t        $ r }| j                  d|        |cY d}~S d}~ww xY w)z Collect the list of mapIDs z"Could not parse bpftool map list: Nr   r   )r   map_jsonr   map_datar   r   r    s          r!   get_bpftool_map_idszEbpf.get_bpftool_map_ids&   s}    	zz(+H !* 	'GAtt|

4:&	' 
  	NN?uEFJ	r#   c                    | j                  d      }| j                  |d         D ]   }dD ]  }| j                  d| d|         " | j                  d      }| j                  |d         D ]  }| j                  d|         | j                  g d       d	}| j	                  d
      }| j                  |      D ]  }||z   dz   }	| j                  |	dz            y )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_prefixs
             r!   setupz
Ebpf.setup3   s   ''(>?00xA 	2G. 2##&8	'.i%1 22	2
 &&'<=..tH~> 	AF"6vh ?@	A 	 
 	 &
|,44D4A 	DI&2S8M0B BC	D    )__name__
__module____qualname__
short_descplugin_nameprofilescommandsr   intoption_listr"   r'   r<    r=   r!   r   r      sA    JK.HH 	,sI	KK
Dr=   r   )r   sos.report.pluginsr   r   r   r   rG   r=   r!   <module>rI      s#     C CED6$ EDr=   