HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/__pycache__/netinfo.cpython-310.pyc
o

�AdKZ�@s�ddlZddlZddlmZmZddlmZddlmZddlm	Z	m
Z
ddlmZddl
mZe��Zggdd	d
�Zdd�Zd
d�Zdd�Zdd�Zd"dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd#d d!�ZdS)$�N)�copy�deepcopy)�IPv4Network)�log)�subp�util)�net_prefix_to_ipv4_mask)�SimpleTable�F��ipv4�ipv6�hwaddr�upc	CsJt�|�}i}|D]�}d|vr|dng}|�d�dkr |dnd}|td|vo+d|v�ggd�}|�d	g�D]d}|�d
�dkrmd|vrPttd
|d���j�nd}|�dd�||�dd�|�dd�d�}	|d�|	�q7|d
dkr�|�dd�}
|
r�|�d�s�|
�d|�dd���}
|
|�dd�d�}	|d�|	�q7|||d<q	|S)a&Get network device dicts from ip route and ip link info.

    ipaddr_json: Output string from 'ip --json addr' command.

    Returns a dict of device info keyed by network device name containing
    device configuration values.

    Raises json.JSONDecodeError if json could not be decoded
    �flags�	link_type�ether�addressr
�UP�LOWER_UP)rrrr
�	addr_info�family�inet�	prefixlenz0.0.0.0/�local�	broadcast�scope)�ip�mask�bcastrr�inet6�/�@)r�scope6r
�ifname)�json�loads�get�bool�strr�netmask�append)�ipaddr_json�ipaddr_data�devs�devrr�dev_info�addrr�parsed_addrr�r3�3/usr/lib/python3/dist-packages/cloudinit/netinfo.py�_netdev_info_iproute_json+sB

���


�
��r5cCs�i}d}t|���D]�\}}t�d|�}|r<|�d����d�d}|�d��d�}ggdtd	|vo5d
|v�d�||<q
d|vr\t�d
|�}|sPt�	d||�q
||d�
|���q
d|vr�t�d|�}|spt�	d||�q
|��}|�d�}|�
d�\}	}
}|s�d}||d�
|	|dr�|dndt|�|dd��q
d|vr�t�d|�}|s�t�	d||�q
|�d�dkr�|�d�||d<q
d||d<q
q
|S)an
    DEPRECATED: Only used on distros that don't support ip json output
    Use _netdev_info_iproute_json() when possible.

    @param ipaddr_out: Output string from 'ip addr show' command.

    @returns: A dict of device info keyed by network device name containing
              device configuration values.
    @raise: TypeError if ipaddr_out isn't a string.
    Nz.^\d+:\s(?P<dev>[^:]+):\s+<(?P<flags>\S+)>\s+.*r/�@rr�,r
rrrr z?\s+inet6\s(?P<ip>\S+)(\s(peer\s\S+))?\sscope\s(?P<scope6>\S+).*z*Could not parse ip addr show: (line:%d) %sr
rzd\s+inet\s(?P<cidr4>\S+)(\smetric\s(?P<metric>\d+))?(\sbrd\s(?P<bcast>\S+))?\sscope\s(?P<scope>\S+).*�cidr4r!�32rrr)rrrr�linkz-\s+link/(?P<link_type>\S+)\s(?P<hwaddr>\S+).*rrr)�	enumerate�
splitlines�re�match�group�lower�splitr(�LOG�warningr+�	groupdict�pop�	partitionr)�
ipaddr_outr.�dev_name�num�line�mrr>r8r1�_�prefixr3r3r4�_netdev_info_iprouteasv�����
����rNc
Cspi}|��D�].}t|�dkrq|ddvr1|��d}|�d�r'|dd�}||vr1tt�||<|������}t|�dkrMt�	d|d�rMd||d<t
t|��D]�}||d	kru||d�d
�\}}||d�|t|�d��qS||d
kr�||d||ddd<qS||dkr�||d||d<qS||dkr�||ddkr�||d�d||di�qS||d�d||di�qS||dkr�||dddd
||d}|||ddd<qS||�
d��r||�d�||ddd<qS||dk�r4t�d||d�}	|	�r&|	�d�||ddd<qS||d||ddd<qSq|S)Nr��	� �:����zflags=[x\d]+<up.*>Trrr!r)rrrrzaddress:rr �addr:r
r�r�scope:r#�scopeid�	.*<(\S+)>)r<�lenrA�endswithr�DEFAULT_NETDEV_INFOr@�stripr=�search�ranger+r�
startswith�lstripr>r?)
�
ifconfig_datar.rJ�curdev�toks�i�network�net_bits�addr6�resr3r3r4�_netdev_info_ifconfig_netbsd�sR
�  $ ��rjcCsi}|��D�]�}t|�dkrq|ddvr1|��d}|�d�r'|dd�}||vr1tt�||<|������}|ddkrFd||d<nt|�dkrZt�	d|d�rZd||d<t
t|��D�]&}||d	kr|||d
�d||d�d�i�q`||�
d
�r�||�d
�||d
dd<q`||dkr�||d||d
dd<q`||�
d�r�||�d�||d
dd<q`||dkr�||d||d
dd<q`||dks�||dkr�||d||d<q`||dk�r||ddk�r||d�d||di�q`||d�d||di�q`||dk�r?||dddd||d}|||ddd<q`||�
d��rW||�d�||ddd<q`||dk�r�t�d||d�}|�ry|�d�||ddd<q`||d||ddd<q`q|S)NrrOrRrSrTrTz
flags=\d+<up,rrrrUzbcast:rrzmask:rr*rrr r
rVrr!rWr#rXrY)r<rZrAr[rr\r@r]r=r^r_r+rar`r>r?)rbr.rJrcrdrerhrir3r3r4�_netdev_info_ifconfig�s`
�    $ �� rkcs�i}t��rtjddgddgd�\}}t|�}nHt�d�rDzt�gd��\}}t|�}Wn3tjyCt�gd��\}}t|�}Ynwt�d�r[tjddgddgd�\}}t|�}nt	�
d	�|d
krf|Sttt
f�d��fdd
�	��||d�|S)N�ifconfigz-arrT��rcsr)rz--jsonr1)rr1�showz>Could not print networks: missing 'ip' and 'ifconfig' commandsr
�r
�cslt|t�r
|��}nt|ttf�rt|�}ntd��|D]\}}||vr)|||<qt|��r3�||�qdS)zQRecursively replace 'empty_vals' in data (dict, tuple, list)
        with new_valzUnexpected input to fillN)�
isinstance�dict�items�tuple�listr;�	TypeError)�data�new_val�
empty_vals�myiter�key�val��fill�
recurse_typesr3r4r7s





��znetdev_info.<locals>.fill)ry)r
rp)r�	is_NetBSDrrj�whichr5�ProcessExecutionErrorrNrkrBrCrsrurv)�emptyr.�	ifcfg_out�_errrGr3r~r4�netdev_infos0

�

�
r�cCs�i}g|d<g|d<|��}ddddddd�}|D]�}t|�}|s"q|��}dg}|ddkr8d|d	<d|d
<n/d|dvrH|d�d�\}}	n|d}d}	|�d
�t|	�|d
<||d	<t|	�|d
<d|d<tt|��D]2}
||
dkr�||
d|d<|�dd�||
dkr�||
d|d<||
dkr�||
d|d<qmd�|�|d<|d�|�qzt	j	gd�ddgd�\}}Wnt	j
y�Y|Sw|��}
|
D]x}i}|s�q�|��}|ddkr�d|d	<d|d<n|d|d	<d|d<d|d<tt|��D]B}
||
dk�r||
d|d<d|d<||
dk�r"||
d|d<||
dk�r1||
d|d<||
dk�r@|dd|d<q�|d�|�q�|S)aP
    Get network route dicts from ip route info.

    @param iproute_data: Output string from ip route command.

    @returns: A dict containing ipv4 and ipv6 route entries as lists. Each
              item in the list is a route dictionary representing destination,
              gateway, flags, genmask and interface information.
    rr
r
)�destinationr�gateway�genmask�iface�metric�Ur�defaultz0.0.0.0r�r�r!r9�Hr��viarT�Gr/r�r�r)rz	--onelinez-6�routerv�table�allrmz::/0�UGz::�expires�e)r<rrAr+rr_rZ�insert�joinrr�)�iproute_data�routes�entries�default_route_entryrJ�entryrdrr1�cidrre�
iproute_data6�_err6�entries6r3r3r4�_netdev_route_info_iprouteKs��

���
�r�c	
Cs
i}g|d<g|d<|��}|D]j}|sq|��}t|�dks=|ddks=|ddks=|ddks=|ddks=|dd	kr>qt|�d
krX|�d�|�d�|d|d
<d|d<|d|d|d|d|d|d|d|d
d�}|d�|�qztjgd�ddgd�\}}Wntjy�Y|Sw|��}|D]f}|s�q�|��}t|�d
ks�|ddks�|ddks�|ddks�|ddks�|ddkr�q�|d|d|d|d|d|d|dd�}|ddkr�q�|d�d�r�t�dd|d�|d<|d�|�q�|S)Nrr
�r�Kernel�Destination�Internet�	Internet6�Routing��-��rTrV��)r�r�r�rr��ref�user�)�netstatz-Ar �--route�	--numericrm�Proto�Active)r�r�rr�r�r�r�r��lor�z/128z\/128$r
)	r<rArZr+rr�r[r=�sub)	�
route_datar�r�rJrdr��route_data6r�r�r3r3r4�_netdev_route_info_netstat�s�
	�
�
�
�
�
�

�
�"�
�
�
�
�
�
��

�r�cCsji}t�d�rt�gd��\}}t|�}|St�d�r.tjgd�ddgd�\}}t|�}|St�d�|S)	Nr)rz-or�rvr�)r�r�r�z--extendrrTrmz;Could not print routes: missing 'ip' and 'netstat' commands)rr�r�r�rBrC)r��iproute_outr��	route_outr3r3r4�
route_info�s

�
���r�cCs�g}d}zt|d�}Wn"ty-}z|�t�djt|�d�dd��WYd}~n�d}~ww|s2dSgd�}t|�}t|�	��D]_\}}|�
d	�D]}|�||d
|d|d|�
d
|�|df�qI|�
d�D]}|�||d
|d||�
d|�|df�qht|�
d��t|�
d	��dkr�|�||d
||||df�q@|�
�}	tt|	��td��}
t�dd|
�}|�||	g�d�|�dS)N�.)r�z Net device info failed ({error})��error�!�P�
)�Device�Up�Address�Mask�Scopez
Hw-Addressrrrrrrr
r#r�r|zNet device info�+)r��	Exceptionr+r�center�formatr)r	�sortedrtr'�add_rowrZ�
get_string�maxr<�extendr�)�linesr��netdevr��fields�tblr/rxr1�netdev_s�max_len�headerr3r3r4�netdev_pformatsb����	
��

�� 
��r�c

Cs�g}zt�}Wn*ty1}z|�t�djt|�d�dd��t�td|�WYd}~n�d}~ww|�	d�r�gd�}t
|�}t|�	d��D]\}}t|�}|�||d|d	|d
|d|dg�qF|�
�}tt|��td
��}	t�dd|	�}
|�|
|g�|�	d�r�gd�}t
|�}t|�	d��D]!\}}t|�}|ddkr�q�|�||d|d	|d|dg�q�|�
�}tt|��td
��}	t�dd|	�}
|�|
|g�d�|�dS)NzRoute info failed ({error})r�r�r�zRoute info failed: %sr)�Router��Gateway�Genmask�	Interface�Flagsr�r�r�r�rr�zRoute IPv4 infor�r
)r�r�r�r�r�r�zRoute IPv6 infor�)r�r�r+rr�r�r)�logexcrBr'r	r;r�r�rZr�r<r�r�)
r�r�r��	fields_v4�tbl_v4�n�r�route_id�route_sr�r��	fields_v6�tbl_v6r3r3r4�
route_pformat?sd
����
��

��	r��	ci-info: cCszg}t���}|r|D]}|�d||f�qn|�|�t���}|r3|D]}|�d||f�q&n|�|�d�|�S)Nz%s%sr�)r�r<r+r�r�r�)rMr��netdev_linesrJ�route_linesr3r3r4�
debug_info�s
�

�

r�)r
)r�)r%r=rr�	ipaddressr�	cloudinitr�loggingrr�cloudinit.net.network_stater�cloudinit.simpletabler	�	getLoggerrBr\r5rNrjrkr�r�r�r�r�r�r�r3r3r3r4�<module>s*
6Q0
90XU4C