Your IP : 216.73.216.31


Current Path : /usr/lib/python3/dist-packages/cloudinit/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/__pycache__/netinfo.cpython-38.pyc

U

�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	CsPt�|�}i}|D�]6}d|kr(|dng}|�d�dkrB|dnd}|td|koXd|k�ggd�}|�d	g�D]�}|�d
�dkr�d|kr�ttd
|d���j�nd}|�dd�||�dd�|�dd�d�}	|d�|	�qp|d
dkrp|�dd�}
|
�r|�d��s|
�d|�dd���}
|
|�dd�d�}	|d�|	�qp|||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
Z	addr_infoZfamily�inet�	prefixlenz0.0.0.0/Zlocal�	broadcast�scope)�ip�mask�bcastrr�inet6�/�@)r�scope6r
Zifname)�json�loads�get�bool�strr�netmask�append)Zipaddr_jsonZipaddr_data�devs�devrrZdev_info�addrrZparsed_addrr�r+�3/usr/lib/python3/dist-packages/cloudinit/netinfo.py�_netdev_info_iproute_json+s@


���


�
�r-cCs�i}d}t|���D�]�\}}t�d|�}|rz|�d����d�d}|�d��d�}ggdtd	|kold
|k�d�||<qd|kr�t�d
|�}|s�t�	d||�q||d�
|���qd|k�rHt�d|�}|s�t�	d||�q|��}|�d�}|�
d�\}	}
}|�sd}||d�
|	|d�r0|dndt|�|dd��qd|krt�d|�}|�srt�	d||�q|�d�dk�r�|�d�||d<nd||d<qqq|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
rrrrz?\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(Zdev_nameZnum�line�mrr6r0r*�_�prefixr+r+r,�_netdev_info_iprouteas����
��
����rDc
Cszi}|��D�]f}t|�dkr q|ddkrb|��d}|�d�rN|dd�}||krbtt�||<|������}t|�dkr�t�	d|d�r�d||d<t
t|��D�]�}||d	kr�||d�d
�\}}||d�|t|�d��q�||d
k�r||d||ddd<q�||dk�r<||d||d<q�||dk�r�||ddk�r|||d�d||di�n||d�d||di�q�||dk�r�||dddd
||d}|||ddd<q�||�
d��r||�d�||ddd<q�||dkr�t�d||d�}	|	�rV|	�d�||ddd<q�||d||ddd<q�q|S)Nr��	� �:����zflags=[x\d]+<up.*>Trrrr)rrrrzaddress:rr�addr:r
r�r�scope:r �scopeid�	.*<(\S+)>)r4�lenr9�endswithr�DEFAULT_NETDEV_INFOr8�stripr5�search�ranger'r�
startswith�lstripr6r7)
�
ifconfig_datar(r@�curdev�toks�iZnetworkZnet_bits�addr6�resr+r+r,�_netdev_info_ifconfig_netbsd�sN
�  $  r^cCs i}|��D�]}t|�dkr q|ddkrb|��d}|�d�rN|dd�}||krbtt�||<|������}|ddkr�d||d<n(t|�dkr�t�	d|d�r�d||d<t
t|��D�]V}||d	kr�||d
�d||d�d�i�q�||�
d
��r(||�d
�||d
dd<q�||dk�rT||d||d
dd<q�||�
d��r�||�d�||d
dd<q�||dk�r�||d||d
dd<q�||dk�s�||dk�r�||d||d<q�||dk�rB||ddk�r"||d�d||di�n||d�d||di�q�||dk�r�||dddd||d}|||ddd<q�||�
d��r�||�d�||ddd<q�||dkr�t�d||d�}|�r�|�d�||ddd<q�||d||ddd<q�q|S)NrrErHrIrTrJz
flags=\d+<up,rrrrKzbcast:rrzmask:rr&rrrr
rLrrrMr rNrO)r4rPr9rQrrRr8rSr5rTrUr'rWrVr6r7)rXr(r@rYrZr[r\r]r+r+r,�_netdev_info_ifconfig�s\
�    $  r_cs�i}t��r0tjddgddgd�\}}t|�}n�t�d�r�z t�dddg�\}}t|�}Wq�tjk
r�t�ddd	g�\}}t|�}Yq�Xn8t�d�r�tjddgddgd�\}}t|�}n
t	�
d
�|dkr�|Sttt
f�d��fd
d�	��||d�|S)NZifconfigz-arrJ�Zrcsrz--jsonr*Zshowz>Could not print networks: missing 'ip' and 'ifconfig' commandsr
�r
�cslt|t�r|��}n t|ttf�r,t|�}ntd��|D].\}}||krR|||<q8t|��r8�||�q8dS)zQRecursively replace 'empty_vals' in data (dict, tuple, list)
        with new_valzUnexpected input to fillN)�
isinstance�dict�items�tuple�listr3�	TypeError)�data�new_valZ
empty_valsZmyiter�key�val��fillZ
recurse_typesr+r,rn7s




znetdev_info.<locals>.fill)rj)r
ra)rZ	is_NetBSDrr^�whichr-�ProcessExecutionErrorrDr_r:r;rdrfrg)�emptyr(Z	ifcfg_out�_errr?r+rmr,�netdev_infos.



�
rscCs�i}g|d<g|d<|��}ddddddd�}|D�].}t|�}|sFq2|��}dg}|ddkrrd|d	<d|d
<n^d|dkr�|d�d�\}}	n"|d}d}	|�d
�t|	�|d
<||d	<t|	�|d
<d|d<tt|��D]h}
||
dk�r
||
d|d<|�dd�||
dk�r(||
d|d<||
dkr�||
d|d<q�d�|�|d<|d�|�q2z(t	j	dddddddgddgd�\}}Wnt	j
k
�r�Y�n
X|��}
|
D]�}i}|�sƐq�|��}|ddk�r�d|d	<d|d<n|d|d	<d |d<d|d<tt|��D]�}
||
dk�r@||
d|d<d|d<||
dk�r^||
d|d<||
dk�r|||
d|d<||
d!k�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.0rtrvrr1�HruZviarJ�Gr)rwrxrrz	--onelinez-6�routerg�table�allr`z::/0ZUGz::Zexpires�e)r4rr9r'rrUrP�insert�joinrrp)Ziproute_data�routes�entriesZdefault_route_entryr@�entryrZrr*Zcidrr[Z
iproute_data6�_err6�entries6r+r+r,�_netdev_route_info_iprouteKs��


�
r�c	
Cs,i}g|d<g|d<|��}|D]�}|s*q |��}t|�dks |ddks |ddks |ddks |ddks |dd	kr|q t|�d
kr�|�d�|�d�|d|d
<d|d<|d|d|d|d|d|d|d|d
d�}|d�|�q z$tjdddddgddgd�\}}Wntjk
�r2Yn�X|��}|D]�}|�sN�q@|��}t|�d
k�s@|ddk�s@|ddk�s@|ddk�s@|ddk�s@|ddk�r��q@|d|d|d|d|d|d|dd�}|ddk�r�q@|d�d��rt�d d!|d�|d<|d�|��q@|S)"Nrr
�rZKernel�DestinationZInternetZ	Internet6ZRouting��-��rJrL��)rtrurvrrx�ref�userw�netstatz-Ar�--route�	--numericr`ZProtoZActive)rtrurrxr�r�rwrw�lortz/128z\/128$r
)	r4r9rPr'rrprQr5�sub)	Z
route_datar�r�r@rZr�Zroute_data6r�r�r+r+r,�_netdev_route_info_netstat�s�	
�
�
�
�
�
�

�
�
�
�
�
�
�
��
�r�cCsni}t�d�r.t�ddddg�\}}t|�}n<t�d�r`tjddddgd	d
gd�\}}t|�}n
t�d�|S)
Nrz-or}rgr�r�r�z--extendrrJr`z;Could not print routes: missing 'ip' and 'netstat' commands)rror�r�r:r;)r�Ziproute_outrrZ	route_outr+r+r,�
route_info�s



�

�r�cCs�g}d}zt|d�}WnDtk
rZ}z$|�t�djt|�d�dd��W5d}~XY�n&X|sddSdd	d
ddd
g}t|�}t|�	��D]�\}}|�
d�D]2}|�||d|d|d|�
d|�|df�q�|�
d�D].}|�||d|d||�
d|�|df�q�t|�
d��t|�
d��dkr�|�||d||||df�q�|�
�}	tt|	��td��}
t�dd|
�}|�||	g�d�|�dS)N�.)rqz Net device info failed ({error})��error�!�P�
ZDeviceZUpZAddressZMaskZScopez
Hw-Addressrrrrrrr
r r�rkzNet device info�+)rs�	Exceptionr'r�center�formatr%r	�sortedrer#�add_rowrP�
get_string�maxr4�extendr�)�linesrqZnetdevr�ZfieldsZtblr)rir*Znetdev_s�max_len�headerr+r+r,�netdev_pformats\��
��

��
 �r�c

Cs�g}z
t�}WnTtk
rb}z4|�t�djt|�d�dd��t�td|�W5d}~XY�nZX|�	d��r
ddd	d
ddg}t
|�}t|�	d��D]:\}}t|�}|�||d
|d|d|d|dg�q�|�
�}tt|��td��}	t�dd|	�}
|�|
|g�|�	d��r�ddd	ddg}t
|�}t|�	d��D]H\}}t|�}|ddk�r\�q:|�||d
|d|d|dg��q:|�
�}tt|��td��}	t�dd|	�}
|�|
|g�d�|�dS)NzRoute info failed ({error})r�r�r�zRoute info failed: %srZRouter�ZGatewayZGenmaskZ	InterfaceZFlagsrtrurvrwrr�zRoute IPv4 infor�r
r�zRoute IPv6 infor�)r�r�r'rr�r�r%Zlogexcr:r#r	r3r�r�rPr�r4r�r�)
r�r�r�Z	fields_v4Ztbl_v4�n�rZroute_idZroute_sr�r�Z	fields_v6Ztbl_v6r+r+r,�
route_pformat?sz
��$���
���	r��	ci-info: cCszg}t���}|r0|D]}|�d||f�qn
|�|�t���}|rf|D]}|�d||f�qLn
|�|�d�|�S)Nz%s%sr�)r�r4r'r�r�r�)rCr�Znetdev_linesr@Zroute_linesr+r+r,�
debug_info�s



r�)r
)r�)r!r5rrZ	ipaddressrZ	cloudinitrZloggingrrZcloudinit.net.network_staterZcloudinit.simpletabler	Z	getLoggerr:rRr-rDr^r_rsr�r�r�r�r�r�r+r+r+r,�<module>s(6Q09
0XU4C