Your IP : 216.73.217.13


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

U

�Ad+$�@s�ddlZddlZddlmZddlmZddlmZmZm	Z	ddl
mZmZm
Z
mZmZddlmZe�e�ZdZGdd	�d	�ZGd
d�d�ZdS)�N)�defaultdict)�	lru_cache)�IPv4Address�
IPv4Interface�
IPv6Interface)�Dict�List�Optional�Tuple�Union)�logz"([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}c@s�eZdZdZdd�Zeed�dd��Zeed�dd��Zeed�d	d
��Z	eed�dd��Z
eed�d
d��Zeed�dd��ZdS)�Ifstatez�
    This class holds the parsed state of a BSD network interface.
    It is itself side-effect free.
    All methods with side-effects should be implemented on one of the
    ``BSDNetworking`` classes.
    cCsp||_d|_i|_i|_d|_g|_g|_g|_d|_d|_	g|_
d|_d|_d|_
d|_g|_i|_g|_dS)NrF)�name�index�inet�inet6�up�options�nd6�flags�mtu�metric�groups�description�media�status�mac�macs�vlan�members)�selfr�r!�D/usr/lib/python3/dist-packages/cloudinit/distros/parsers/ifconfig.py�__init__s$zIfstate.__init__)�returncCsd|jkpd|jkS)NZloopback�lo)rr�r r!r!r"�is_loopback1szIfstate.is_loopbackcCs0d|jkrdS|jgkr,|jr,d|jkr,dSdS)NZegressTZEthernetF)rrr&r!r!r"�is_physical5s

zIfstate.is_physicalcCs
d|jkS)NZbridge�rr&r!r!r"�	is_bridge>szIfstate.is_bridgecCs
d|jkS)NZlaggr)r&r!r!r"�is_bondBszIfstate.is_bondcCsd|jkp|jikS)Nr)rrr&r!r!r"�is_vlanFszIfstate.is_vlancCs
d|jkS)NZwlanr)r&r!r!r"�is_wlanJszIfstate.is_wlanN)
�__name__�
__module__�__qualname__�__doc__r#�property�boolr'r(r*r+r,r-r!r!r!r"r
sr
c@s�eZdZdZdd�Ze�eeeee	e
e	ffd�dd��Zdd�Zd	d
�Z
eeeefd�dd
�Zdd�Zeeeefd�dd�Zeed�dd�ZdS)�Ifconfiga8
    A parser for BSD style ``ifconfig(8)`` output.
    For documentation here:
    - https://man.freebsd.org/ifconfig(8)
    - https://man.netbsd.org/ifconfig.8
    - https://man.openbsd.org/ifconfig.8
    All output is considered equally, and then massaged into a singular form:
    an ``Ifstate`` object.
    cCsi|_i|_dS�N)�_ifs_by_name�_ifs_by_macr&r!r!r"r#ZszIfconfig.__init__)�textr$cCs�d}tt�}|��D�]�}t|�dkr(q|ddkrv|d7}|��d}|�d�r^|dd�}t|�}||_||j|<|�	��
���}t|�dkr�|d�d�r�|�|�}|ikr�t
�|d�|_|d	|_d
|kr�|d
|_d|kr�|d|_|d�d��rt�d
|d�}	|j�|	�|ddk�r8t|d�|_|ddk�r^||�d�dd�|_|d�d��s�|d�d��s�|d�d��r�t�d
|d�}
t|
�dk�r�|j|
d�d�7_|ddk�r�|d|_|j�|d�||d�|�|ddk�r.|j�|d�||d�|�|ddk�rR|j|dd�7_|ddk�rx||�d�dd�|_|ddk�r�t�d
|d�}t|�dk�r�|d�d�|_|ddk�r�|d|_|ddk�r�|�|�}t
�|d�|j|d<|ddk�r,|� |�}t
�|d�|j!|d<|ddk�sH|ddk�rZ|j"|d7_"|dd kri|_#|d|j#d!<t$dt|��D]&}
||
d"k�r�||
d|j#d#<�q�qt%|�|_&|j|j&�S)$a
        Parse the ``ifconfig -a`` output ``text``, into a dict of ``Ifstate``
        objects, referenced by ``name`` *and* by ``mac`` address.

        This dict will always be the same, given the same input, so we can
        ``@lru_cache()`` it. n.b.: ``@lru_cache()`` takes only the
        ``__hash__()`` of the input (``text``), so it should be fairly quick,
        despite our giant inputs.

        @param text: The output of ``ifconfig -a``
        @returns: A dict of ``Ifstate``s, referenced by ``name`` and ``mac``
        r)�	� ��:N���zflags=rrrrz
capabilities=�<|>rzdescription:�zoptions=Zec_capabilitiesZ
ec_enabled�,ZetherZhwaddrzgroups:zmedia:z: rrrrzmember:z	laggport:zvlan:�idz
interface:�link)'r�list�
splitlines�len�split�endswithr
rr6�lower�strip�
startswith�_parse_flags�copy�deepcopyrrrr�re�append�intrrrrrrrr�_parse_inetr�_parse_inet6rrr�range�dictr7)r r8Zifindex�
ifs_by_mac�lineZcurifZdev�toksrZcapsrZnd6_opts�ip�ir!r!r"�parse^s�





���




zIfconfig.parsecCs|jSr5)r6r&r!r!r"�ifs_by_name�szIfconfig.ifs_by_namecCs|jSr5)r7r&r!r!r"rU�szIfconfig.ifs_by_mac)rWr$cCs�d}d|dkrBt|d�}t|j�}d|kr�||�d�d}nDttt|dd���}d|krr||�d�d}td|d|f�}|j�d�d}t|j�|||d�fS)N�/r;�	broadcast�r�%s/%s)�netmaskr]�	prefixlen)	r�strr`rrrPZwith_prefixlenrFrX)r rWr]rXr`rar!r!r"rQ�s"
��zIfconfig._parse_inetcCs4tdt|��D] }||dkr||dSqdS)Nr?rar;)rSrE)r rWrYr!r!r"�_get_prefixlen�szIfconfig._get_prefixlencCs�d}d|dkrZd}|d�d�\}}d|kr>|�d�d}n
|�|�}td||f�}nJd|dkr�t|d�}|d�d�d}n|�|�}td|d|f�}|s�|jr�d}n|s�|jr�d}t|j�||d�fS)N�%r;z
link-localr\r_z
site-local)ra�scope)rFrcrZ
is_link_localZ
is_site_localrbrX)r rWreZip6�restrarXr!r!r"rR�s$



zIfconfig._parse_inet6cCs�t�d|d�}i}t|�dkr�|d�d�|d<d|dkrHd|d<nd|d<tdt|��D]F}||d	kr�t||d�|d	<q^||d
kr^t||d�|d
<q^|S)Nr>r;r@rrTFr?rr)rNrFrErSrP)r rWrZret�tr!r!r"rKs
zIfconfig._parse_flagsN)r.r/r0r1r#rrbrrr
rrZr[rUrCr
rTrQrcrRrKr!r!r!r"r4Os
&mr4)rLrN�collectionsr�	functoolsrZ	ipaddressrrr�typingrrr	r
rZ	cloudinitrZloggingZ	getLoggerr.ZLOGZMAC_REr
r4r!r!r!r"�<module>s
: