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/distros/parsers/__pycache__/ifconfig.cpython-310.pyc
o

�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�Zedefdd��Zedefdd��Zedefd	d
��Z	edefdd��Z
edefd
d��Zedefdd��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|jvp	d|jvS)N�loopback�lo)rr�r r!r!r"�is_loopback1�zIfstate.is_loopbackcCs0d|jvrdS|jgkr|jrd|jvrdSdS)N�egressT�EthernetF)rrr'r!r!r"�is_physical5s

zIfstate.is_physicalcC�
d|jvS)N�bridge�rr'r!r!r"�	is_bridge>�
zIfstate.is_bridgecCr-)N�laggr/r'r!r!r"�is_bondBr1zIfstate.is_bondcCsd|jvp	|jikS)Nr)rrr'r!r!r"�is_vlanFr)zIfstate.is_vlancCr-)N�wlanr/r'r!r!r"�is_wlanJr1zIfstate.is_wlanN)
�__name__�
__module__�__qualname__�__doc__r#�property�boolr(r,r0r3r4r6r!r!r!r"r
sr
c
@s�eZdZdZdd�Ze�dedeeee	e
e	fffdd��Zdd	�Zd
d�Z
dedeeeffd
d�Zdd�Zdedeeeffdd�Zdedefdd�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#Zs
zIfconfig.__init__�textr$cCs�d}tt�}|��D�]�}t|�dkrq
|ddvr;|d7}|��d}|�d�r/|dd�}t|�}||_||j|<|�	��
���}t|�dkrx|d�d�rx|�|�}|ikrxt
�|d�|_|d	|_d
|vro|d
|_d|vrx|d|_|d�d�r�t�d
|d�}	|j�|	�|ddkr�t|d�|_|ddkr�||�d�dd�|_|d�d�s�|d�d�s�|d�d�r�t�d
|d�}
t|
�dkr�|j|
d�d�7_|ddkr�|d|_|j�|d�||d�|�|ddk�r|j�|d�||d�|�|ddk�r!|j|dd�7_|ddk�r4||�d�dd�|_|ddk�rRt�d
|d�}t|�dk�rR|d�d�|_|ddk�r^|d|_|ddk�rv|�|�}t
�|d�|j|d<|ddk�r�|� |�}t
�|d�|j!|d<|ddk�s�|ddk�r�|j"|d7_"|dd k�r�i|_#|d|j#d!<t$dt|��D]}
||
d"k�r�||
d|j#d#<�q�q
t%|�|_&i|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=�ec_capabilities�
ec_enabled�,�ether�hwaddrzgroups:zmedia:z: rrrrzmember:z	laggport:zvlan:�idz
interface:�link)'r�list�
splitlines�len�split�endswithr
rr?�lower�strip�
startswith�_parse_flags�copy�deepcopyrrrr�re�append�intrrrrrrrr�_parse_inetr�_parse_inet6rrr�range�dictr@)r rA�ifindex�
ifs_by_mac�line�curif�dev�toksr�capsr�nd6_opts�ip�ir!r!r"�parse^s�





���



�
zIfconfig.parsecC�|jSr>)r?r'r!r!r"�ifs_by_name��zIfconfig.ifs_by_namecCrmr>)r@r'r!r!r"rc�rozIfconfig.ifs_by_macrgcCs�d}d|dvr!t|d�}t|j�}d|vr ||�d�d}n"ttt|dd���}d|vr9||�d�d}td|d|f�}|j�d�d}t|j�|||d�fS)N�/rD�	broadcast�r�%s/%s)�netmaskrq�	prefixlen)	r�strrtrrr]�with_prefixlenrSrj)r rgrqrjrtrur!r!r"r^�s$
���zIfconfig._parse_inetcCs4tdt|��D]}||dkr||dSqdS)NrHrurD)r`rR)r rgrkr!r!r"�_get_prefixlen�s
��zIfconfig._get_prefixlencCs�d}d|dvr-d}|d�d�\}}d|vr|�d�d}n|�|�}td||f�}n%d|dvrCt|d�}|d�d�d}n|�|�}td|d|f�}|sZ|jrZd}n|sa|jrad}t|j�||d�fS)N�%rDz
link-localrprsz
site-local)ru�scope)rSrxr�
is_link_local�
is_site_localrvrj)r rgrz�ip6�restrurjr!r!r"r_�s$



zIfconfig._parse_inet6cCs�t�d|d�}i}t|�dkrS|d�d�|d<d|dvr$d|d<nd|d<tdt|��D]#}||d	krBt||d�|d	<q/||d
krRt||d�|d
<q/|S)NrGrDrKrrTFrHrr)r[rSrRr`r])r rgr�ret�tr!r!r"rXs
�zIfconfig._parse_flagsN)r7r8r9r:r#rrvrrr
rrlrnrcrPr
rar^rxr_rXr!r!r!r"r=Os
(mr=)rYr[�collectionsr�	functoolsr�	ipaddressrrr�typingrrr	r
r�	cloudinitr�logging�	getLoggerr7�LOG�MAC_REr
r=r!r!r!r"�<module>s
: