AnonSec Shell
Server IP : 209.38.156.173  /  Your IP : 216.73.216.122   [ Reverse IP ]
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux lakekumayuhotel 5.15.0-136-generic #147-Ubuntu SMP Sat Mar 15 15:53:30 UTC 2025 x86_64
User : root ( 0)
PHP Version : 8.1.2-1ubuntu2.22
Disable Function : NONE
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/python3/dist-packages/cloudinit/net/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /lib/python3/dist-packages/cloudinit/net/__pycache__/__init__.cpython-310.pyc
o

x[h���@s~ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
Z
mZddlmZe�e�ZdZdZgd�Zgd�Ze�d	�fd
d�Zdd
�Zd�dd�Z				d�dd�Zd�dd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd �Z#d!d"�Z$d#d$�Z%ej&dd%�d&e'fd'd(��Z(ej&dd%�d&e)fd)d*��Z*d+e+d&e'fd,d-�Z,d�d.d/�Z-d0d1�Z.d2d3�Z/d�d&e'fd4d5�Z0d�d6d7�Z1d�d8d9�Z2d:d;�Z3d<d=�Z4d>d?�Z5d@dA�Z6dBdC�Z7GdDdE�dEe8�Z9dFdG�Z:d&e	e+fdHdI�Z;d&e
e+fdJdK�Z<d&e	e+fdLdM�Z=d&e
e+fdNdO�Z>d&e	e+fdPdQ�Z?d&e
e+fdRdS�Z@d&e	e+fdTdU�ZAd&e
e+fdVdW�ZBd�d&e
eCfdXdY�ZDdZd[�ZEd�d]d^�ZFd�d`da�ZG	d�dbdc�ZHddde�ZIdfdg�ZJd&eCfdhdi�ZKdje+d&e
e+fdkdl�ZLd&eCfdmdn�ZMd&eCfdodp�ZNd&eCfdqdr�ZOd&eCfdsdt�ZP	_	_	_	_	_	_	\d�due'dve'dwe'dxe'dye'dze'd{e'd&e)fd|d}�ZQd~edd�e	ee+e+e+e+fd&dfd�d��ZRd�d��ZSd�ed�e+fd�d��ZTd�e+d&e'fd�d��ZUd�e+d&e'fd�d��ZVd�e+d&e'fd�d��ZWd�e+d&e'fd�d��ZXd�e+d&e'fd�d��ZYd�e+d&e'fd�d��ZZd�e+d�e+d&e'fd�d��Z[d�e+d�e+d&e'fd�d��Z\d&e'fd�d��Z]d&e+fd�d��Z^d&e_fd�d��Z`d&e_fd�d��Zad�e+d�e+d&e+fd�d��ZbGd�d��d�ec�ZddS)��N)�Callable�Dict�List�Optional�Tuple)�subp�util)�Iproute2z/sys/class/net/�eth0)�dhcp6�
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-stateful)�	ovs-vsctlz--format�csvz
--no-headingsz	--timeout�10z	--columns�name�find�	interfacez
type=internalz([0-9]+)cCsdd�t�||�D�S)aDSorting for Humans: natural sort order. Can be use as the key to sort
    functions.
    This will sort ['eth0', 'ens3', 'ens10', 'ens12', 'ens8', 'ens0'] as
    ['ens0', 'ens3', 'ens8', 'ens10', 'ens12', 'eth0'] instead of the simple
    python way which will produce ['ens0', 'ens10', 'ens12', 'ens3', 'ens8',
    'eth0'].cSs$g|]}|��rt|�n|���qS�)�isdigit�int�lower)�.0�textrr�8/usr/lib/python3/dist-packages/cloudinit/net/__init__.py�
<listcomp>2s��z$natural_sort_key.<locals>.<listcomp>)�re�split)�s�_nsrerrr�natural_sort_key+s
�rcCstS)z3Simple function to return the global SYS_CLASS_NET.)�
SYS_CLASS_NETrrrr�get_sys_class_path8sr!�cCst�|d|S)N�/)r!��devname�pathrrr�sys_dev_path=�r'c

Cs�t||�}zt�|�}Wn?ttfyK}z1t|dd�}	|	tjtjfvr2|dur2||�WYd}~S|	tj	fvrF|durF||�WYd}~S�d}~ww|�
�}|durV|Sz||WSty}}z|durq||�WYd}~St�
d||��d}~ww)N�errnoz5Found unexpected (not translatable) value '%s' in '%s)r'r�load_text_file�OSError�IOError�getattrr)�ENOENT�ENOTDIR�EINVAL�strip�KeyError�LOG�debug)
r%r&�	translate�	on_enoent�on_keyerror�	on_einval�dev_path�contents�e�e_errnorrr�read_sys_netAs<
��	
���r=cCsdd�}t||||||d�S)NcSsdS�NFr)r;rrr�
on_excp_falsegsz(read_sys_net_safe.<locals>.on_excp_false)r7r6r8r5)r=)�iface�fieldr5r?rrr�read_sys_net_safefs�rBcCs6t||�}|durdSzt|�WStyYdSwr>)rBr�
ValueError)r@rA�valrrr�read_sys_net_intts

�rEcCsdddd�}t|d|d�S)NTF)�up�unknown�down�	operstate)r5�rB)r%r5rrr�is_up~srKcC�tj�t|d��S)N�bridge��osr&�existsr'�r%rrr�	is_bridge�r(rRcCrL)N�bondingrNrQrrr�is_bond�r(rTcCs t|dd�}tj�|�r|SdS)z8Return the master path for devname, or None if no master�master�r&N)r'rOr&rPr$rrr�
get_master�srWcCsHt|�}|dur
dStj�|d�}tj�|d�}tj�|�p#tj�|�S)z@Return a bool indicating if devname's master is a bridge or bondNFrSrM)rWrOr&�joinrP)r%�master_path�bonding_path�bridge_pathrrr�master_is_bridge_or_bond�sr\cCs,t|�}|dur
dSt|dd�}tj�|�S)z;Return a bool indicating if devname's master is openvswitchNFzupper_ovs-systemrV)rWr'rOr&rP)r%rY�ovs_pathrrr�master_is_openvswitch�s
r^cCst|d�dkS)N�type�32rJrQrrr�is_ib_interface�sra)�maxsize�returncCs tt�d��}|st�d�|S)zDReturn a bool indicating if Open vSwitch is installed in the system.r
z<ovs-vsctl not in PATH; not detecting Open vSwitch interfaces)�boolr�whichr3r4)�retrrr�openvswitch_is_installed�s�rgc
CsZzt�t�\}}W|��Stjy,}zd|jvr't�d�gWYd}~S�d}~ww)z�Return a list of the names of OVS internal interfaces on the system.

    These will all be strings, and are used to exclude OVS-specific interface
    from cloud-init's network configuration handling.
    zdatabase connection failedzJOpen vSwitch is not yet up; no interfaces will be detected as OVS-internalN)r�!OVS_INTERNAL_INTERFACE_LOOKUP_CMD�ProcessExecutionError�stderrr3�info�
splitlines)�out�_err�excrrr�get_ovs_internal_interfaces�s
�
���rpr%cCs,t�sdSt�}||vrt�d|�dSdS)z�Returns True if this is an OVS internal interface.

    If OVS is not installed or not yet running, this will return False.
    FzDetected %s as an OVS interfaceT)rgrpr3r4)r%�ovs_bridgesrrr�!is_openvswitch_internal_interface�srrcCs,|durt|�}t||�st||�rdSdS)z�netfailover driver uses 3 nics, master, primary and standby.
    this returns True if the device is either the primary or standby
    as these devices are to be ignored.
    NTF)�
device_driver�is_netfail_primary�is_netfail_standby�r%�driverrrr�is_netfailover�s�rxcCs*d}zt|d�}W|StyY|Sw)zDReturns a str from reading /sys/class/net/<devname>/device/features.r"zdevice/features)r=�	Exception�r%�featuresrrr�get_dev_features�s��r|cCs(t|�}|rt|�dkrdS|ddkS)z�Return True if VIRTIO_NET_F_STANDBY bit (62) is set.

    https://github.com/torvalds/linux/blob/         089cf7f6ecb266b6a4164919a2e69bd2f938374a/         include/uapi/linux/virtio_net.h#L60
    �@F�>�1)r|�lenrzrrr�has_netfail_standby_feature�sr�cCs<t|�durdS|durt|�}|dkrdSt|�sdSdS)z�A device is a "netfail master" device if:

    - The device does NOT have the 'master' sysfs attribute
    - The device driver is 'virtio_net'
    - The device has the standby feature bit set

    Return True if all of the above is True.
    NF�
virtio_netT�rWrsr�rvrrr�is_netfail_master�	r�cCstt|dd�}tj�|�sdS|durt|�}|dkrdStj�tj�|��}t|�}|dkr0dSt|�}|s8dSdS)a7A device is a "netfail primary" device if:

    - the device has a 'master' sysfs file
    - the device driver is not 'virtio_net'
    - the 'master' sysfs file points to device with virtio_net driver
    - the 'master' device has the 'standby' feature bit set

    Return True if all of the above is True.
    rUrVFNr�T)r'rOr&rPrs�basename�realpathr�)r%rw�master_sysfs_path�master_devname�
master_driver�master_has_standbyrrrrtsrtcCs<t|�durdS|durt|�}|dkrdSt|�sdSdS)z�A device is a "netfail standby" device if:

    - The device has a 'master' sysfs attribute
    - The device driver is 'virtio_net'
    - The device has the standby feature bit set

    Return True if all of the above is True.
    NFr�Tr�rvrrrru9r�rucCst|d�}|r
|dvr
dSdS)a�
    /* interface name assignment types (sysfs name_assign_type attribute) */
    #define NET_NAME_UNKNOWN      0  /* unknown origin (not exposed to user) */
    #define NET_NAME_ENUM         1  /* enumerated by kernel */
    #define NET_NAME_PREDICTABLE  2  /* predictably named by the kernel */
    #define NET_NAME_USER         3  /* provided by user-space */
    #define NET_NAME_RENAMED      4  /* renamed by user-space */
    �name_assign_type)�3�4TFrJ)r%r�rrr�
is_renamedQs
	r�cCstt|d��}d|��vS)N�ueventzDEVTYPE=vlan)�strrBrl)r%r�rrr�is_vlan`sr�cCs0d}t|d�}tj�|�rtj�t�|��}|S)z8Return the device driver for net device named 'devname'.Nz
device/driver)r'rOr&�islinkr��readlink)r%rw�driver_pathrrrrses

rscCst|d�}|durdS|S)z;Return the device id string for net device named 'devname'.z
device/deviceFNrJ)r%�dev_idrrr�device_devidps
r�c
Cslt��st��rtt����Sz	t�t��}W|St	y5}z|j
t
jkr)g}n�WYd}~|Sd}~ww�N)r�
is_FreeBSD�is_DragonFlyBSD�list�get_interfaces_by_mac�valuesrO�listdirr!r+r)r.)�devsr;rrr�get_devicelistys�
���r�c@seZdZdZdS)�ParserErrorz6Raised when a parser has issue parsing a file/content.N)�__name__�
__module__�__qualname__�__doc__rrrrr��sr�cCs |rt|t�s	dS|�d�dkS)NF�config�disabled)�
isinstance�dict�get)�cfgrrr�is_disabled_cfg�sr�cC�2t��st��rt�St��st��rt�St�S)zqGet the list of network interfaces viable for networking.

    @return List of interfaces, sorted naturally.
    )rr�r��find_candidate_nics_on_freebsd�	is_NetBSD�
is_OpenBSD�(find_candidate_nics_on_netbsd_or_openbsd�find_candidate_nics_on_linuxrrrr�find_candidate_nics�s
r�cCr�)z.Get the name of the 'fallback' network device.)rr�r��find_fallback_nic_on_freebsdr�r��&find_fallback_nic_on_netbsd_or_openbsd�find_fallback_nic_on_linuxrrrr�find_fallback_nic�s
r�cCstt���td�S)zmGet the names of the candidate network devices on NetBSD/OpenBSD.

    @return list of sorted interfaces
    ��key)�sortedr�r�rrrrrr��sr�cC�t�}|r	|dSdS)zfGet the 'fallback' network device name on NetBSD/OpenBSD.

    @return default interface, or None
    rN)r���namesrrrr���r�cCs4t�gd��\}}|��}|r|Stt���td�S)zgGet the names of the candidate network devices on FreeBSD.

    @return List of sorted interfaces.
    )�ifconfigz-lz-u�etherr�)rrr�r�r�r)�stdout�_stderrr�rrrr��s
r�cCr�)z_Get the 'fallback' network device name on FreeBSD.

    @return List of sorted interfaces.
    rN)r�r�rrrr��r�r�c
CsBdt��vrt�d�ndd�t�D�}t|�r"t�d|�t��g}g}tddddddd�D]L\}}}}|d	kr;q0|�d
�rGt�d|�q0t	|d�}|rT|�
|�q0t�d
|�t	|d�}|rg|�
|�q0t|d�}|dvrv|�
|�q0t�d|�q0g}||fD]}	t|	t
d�}	t|	vr�|	�t�|	�dt�||	7}q�|S)zeGet the names of the candidate network devices on Linux.

    @return List of sorted interfaces.
    z
net.ifnames=0z9Stable ifnames disabled by net.ifnames=0 in /proc/cmdlinecSs g|]}|dkrt|�s|�qS)�lo)r�)r�devicerrrr�s
�z0find_candidate_nics_on_linux.<locals>.<listcomp>z4Found unstable nic names: %s; calling udevadm settleFT)�filter_openvswitch_internal�2filter_slave_if_master_not_bridge_bond_openvswitch�filter_vlan�filter_without_own_mac�filter_zero_mac�log_filtered_reasonsr��vethzIgnoring veth interface: %s�carrierzInterface has no carrier: %s�dormantrI)r�rH�lowerlayerdownrGzInterface ignored: %sr�r)r�get_cmdliner3r4r�r��udevadm_settle�get_interfaces�
startswithrE�appendrBr�r�DEFAULT_PRIMARY_INTERFACE�remove�insert)
�unstable�	connected�possibly_connectedr�_r�r�rI�sorted_interfaces�
interfacesrrrr��s`���








r�cCr�)z]Get the 'fallback' network device name on Linux.

    @return List of sorted interfaces.
    rN)r�r�rrrr�r�r�cCsjt�}|sdSt|�rd|i}n	dt|d���i}|r%t|�}|r%||d<dd||d�}||idd	�}|S)
zBGenerate network cfg v2 for dhcp on the NIC most likely connected.Nr�
macaddress�addressrwT)�dhcp4r�set-name�match�)�	ethernets�version)r�r�rBrrs)�
config_driver�target_namer�rwr��nconfrrr�generate_fallback_config+s$
��r�cCsFdd�}dd�}|�d�}|dkr||�S|dkr||�Std|��)	NcSs�g}|�di�D]>}|�d�dkrq|�d�}|sq|�d�}|�di��d�}|�di��d�}|s7t|�}|s=t|�}|�||||g�q|S)	Nr�r_�physical�mac_addressr�paramsrw�	device_id)r�rsr�r�)�netcfg�physdevs�ent�macrrwr�rrr�
_version_1Is 

z$extract_physdevs.<locals>._version_1cSs�g}|�di���D]=}|�d�}|sq
|�di��d�}|s q
|�di��d�}|�di��d�}|s8t|�}|s>t|�}|�||||g�q
|S)Nr�r�r�r�rwr�)r�r�rsr�r�)r�r�r�rr�rwr�rrr�
_version_2[s 
z$extract_physdevs.<locals>._version_2r��r�z"Unknown network config version: %s)r��RuntimeError)r�r�r�r�rrr�extract_physdevsHs
r�FcCs*t|d�}|dur|rtd��dS|dvS)a�return True if the provided interface has its own address.

    Based on addr_assign_type in /sys.  Return true for any interface
    that does not have a 'stolen' address. Examples of such devices
    are bonds or vlans that inherit their mac from another device.
    Possible values are:
      0: permanent address    2: stolen from another device
    1: randomly generated   3: set using dev_set_mac_address�addr_assign_typeNz%s had no addr_assign_type.T)rr��)rErC)�ifname�strict�assign_typerrr�interface_has_own_macxs

r�Tc
Cs�i}t�D]\}}}}d|||��|t|�d�||<q|r_t�d�}tjgd�dd�\}}tjgd�dd�\}	}t�}
||	fD]
}|
�|�|��q?|�	�D]}|dd	up[|d
|
v|d<qN|S)a�Collect information necessary for rename_interfaces.

    returns a dictionary by mac address like:
       {name:
         {
          'downable': None or boolean indicating that the
                      device has only automatically assigned ip addrs.
          'device_id': Device id value (if it has one)
          'driver': Device driver (if it has one)
          'mac': mac address (in lower case)
          'name': name
          'up': boolean: is_up(name)
         }}
    N)�downabler�rwr�rrFz[0-9]+:\s+(\w+)[@:])�ipz-6�addr�show�	permanent�scope�globalT)�capture)r�z-4r�r�rFFrr�)
r�rrKr�compiler�set�update�findallr�)
�check_downable�cur_inforr�rwr��nmatch�ipv6rn�ipv4�nics_with_addresses�	bytes_out�drrr�_get_current_rename_info�s.�	

��rcsft|�st�d�dS|durt�}i�|��D]\}}|��}|�d�r-|d��|d<||d<|�|<qt�d��dd�}g}g}	g}
|��}d}d}
d	d
����fdd�}|D]�\}}}}|rg|��}g}||||�}|s}|r||	�d
||f�q[|�d�}||kr�q[|s�|r�|	�d
||f�q[|dr�d}|ds�|r�|	�||||f�q[d|d<|�d|||ff�|
�d|||ff�||v�r+||}|dr�d}|ds�|r�|	�||||f�q[|�d|||ff�d}|dus�||v�r	|
d7}
||
}|dus�||vs�|�d||||ff�||d<|��}|d�r+|
�d|||ff�|�d|||d|ff�||d<|��}||7}q[t	j
t	jt	jd�}|�sh|
�sht|	��rat�
d||	�nDt�d|�n=t�d|||
�||
D]/\}}}}z	|||�W�qut�y�}z|	�d|||||f�WYd}~�qud}~wwt|	��r�td�|	���dS)Nzno interfaces to renamer�rzDetected interfaces %scSstdd�|��D��S)Ncss�|]	}|d|fVqdS)rNr�r�datarrr�	<genexpr>�s�z<_rename_interfaces.<locals>.update_byname.<locals>.<genexpr>)r�r�)�bymacrrr�
update_byname�sz)_rename_interfaces.<locals>.update_bynamez
cirename%d���cSsd|r|r|r|d|ko|d|ko|d|kS|r(|r(|d|ko'|d|kS|r0|d|kSdS)zmatch if set and in datar�rwr�Fr)rr�rwr�rrr�entry_match�s
�
�z'_rename_interfaces.<locals>.entry_matchcsT����fdd����D�}t|�r(t|�dkr$d|���f}t|��|dSdS)Ncsg|]}�|����r|�qSrrr)r�rwrr�rrr�s��z:_rename_interfaces.<locals>.find_entry.<locals>.<listcomp>r�zjFailed to match a single device. Matched devices "%s" with search values "(mac:%s driver:%s device_id:%s)"r)r�r�rC)r�rwr�r��msg�r	r)r�rwr�r�
find_entry�s�
��z&_rename_interfaces.<locals>.find_entryz<[nic not present] Cannot rename mac=%s to %s, not available.rFz*[busy] Error renaming mac=%s from %s to %sr�FrHz2[busy-target] Error renaming mac=%s from %s to %s.r��rename)rrHrFz1Unable to rename interfaces: %s due to errors: %sz$no work necessary for renaming of %szRenamed %s with ops %sz.[unknown] Error performing %s%s for %s, %s: %s�
)r�r3r4r�items�copyr�rr�r	�link_rename�	link_down�link_up�warningryr�rX)�renames�strict_present�strict_busy�current_inforr�curr�ops�errors�ups�
cur_byname�tmpname_fmt�tmpirr��new_namerwr��cur_ops�cur_namer�target�tmp_name�opmap�opr�r;rrr�_rename_interfaces�s�


��
��
�

�
�����
�r5cCs$d}tj�t|d��r
d}t||�S)z6Returns the string value of an interface's MAC Addressr��
bonding_slavezbonding_slave/perm_hwaddr)rOr&�isdirr'rB)r�r&rrr�get_interface_macXs
r8cCs>t|d�dkrt|�}|r|r|dd�|dd�}|SdS)z�Returns the string value of an Infiniband interface's hardware
    address. If ethernet_format is True, an Ethernet MAC-style 6 byte
    representation of the address will be returned.
    r_r`�$i��3N)rBr8)r��ethernet_formatr�rrr�get_ib_interface_hwaddrbs�r<cCs8t��st��rt�St��rt�St��rt�St�Sr�)	rr�r�� get_interfaces_by_mac_on_freebsdr��get_interfaces_by_mac_on_netbsdr�� get_interfaces_by_mac_on_openbsd�get_interfaces_by_mac_on_linuxrrrrr�psr�r�cCs0t���D]\}}|��|��kr|SqdSr�)r�rr)r��
interface_mac�interface_namerrr�find_interface_name_from_mac{s
�rCcCs<t�gd��\}}dd�}dd�}dd�|||��D�}|S)N)r��-ar�cssB�d}|�d�D]}|�d�r||7}q|r|V|}q|VdS)Nr"r�	)rr�)rm�
curr_block�linerrr�flatten�s�


z1get_interfaces_by_mac_on_freebsd.<locals>.flattencss6�|D]}t�d|�}|r|�d�|�d�fVqdS)Nz2^(?P<ifname>\S*): .*ether\s(?P<mac>[\da-f:]{17}).*r�r�)r�search�group)�	flat_list�block�mrrr�find_mac�s����z2get_interfaces_by_mac_on_freebsd.<locals>.find_maccSsi|]\}}||�qSrr)rr�r�rrr�
<dictcomp>�sz4get_interfaces_by_mac_on_freebsd.<locals>.<dictcomp>)r)rmr�rHrN�resultsrrrr=�s
r=cC�bi}d}t�ddg�\}}t�dd|���}|D]}t�||�}|r.|��}|d||d<q|S)NzE(?P<ifname>\w+).*address:\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�rD�\n\s+� r�r��rr�subrlr��	groupdict�rf�re_field_matchrmr��if_linesrGrM�fieldsrrrr>����r>cCrQ)NzC(?P<ifname>\w+).*lladdr\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�rDrRrSr�r�rTrWrrrr?�r[r?cCs�i}t�D]D\}}}}||vr+|dvrt�d||||�qd||||f}t|��|||<t|d�}|rI||vr?|||<qt�d||||�q|S)zmBuild a dictionary of tuples {mac: name}.

    Bridges and any devices that have a 'stolen' mac are excluded.)�	fsl_enetc�
mscc_felix�qmi_wwanz>Ignoring duplicate macs from '%s' and '%s' due to driver '%s'.z6duplicate mac found! both '%s' and '%s' have mac '%s'.Tz^Ethernet and InfiniBand interfaces have the same address both '%s' and '%s' have address '%s'.)r�r3r4r�r<r")rfrr�rw�_devidr�ib_macrrrr@�s<��

��r@�filter_hyperv_vf_with_syntheticr�r�r�r�r�r�cCs"|rtjndd�}g}t�}	d�d�}
|	D]r}|rt|�sqt|�r(|d|�q|r/t|�r/qt|�r9|d|�q|rJt|�durJt	|�sJt
|�sJqt|�rT|d|�qt|�}|s`|d	|�q|rq|d
krq||
dt
|��krqq|rxt|�rxqt|�}
|�|||
t|�f�q|r�t||�|S)z�Return list of interface tuples (name, mac, driver, device_id)

    Bridges and any devices that have a 'stolen' mac are excluded.cWsdSr�r)�argsrrr�<lambda>sz get_interfaces.<locals>.<lambda>�:)�00rererererererererererererererezIgnoring bridge interface: %szIgnoring bond interface: %sNzIgnoring failover interface: %sz"Ignoring interface without mac: %sr�)r3r4r�rXr�rRr�rTrWr\r^rxr8r�rrrsr�r��)filter_hyperv_vf_with_synthetic_interface)rar�r�r�r�r�r��filtered_loggerrfr��zero_macrr�rwrrrr�sR


���

 �
r�rg).Nr�csXdd�|D���fdd�|D�}|D]}|\}}}}|d||�||�|�|�qdS)a�Filter Hyper-V SR-IOV/VFs when used with synthetic hv_netvsc.

    Hyper-V's netvsc driver may register an SR-IOV/VF interface with a mac
    that matches the synthetic (hv_netvsc) interface.  This VF will be
    enslaved to the synthetic interface, but cloud-init may be racing this
    process.  The [perhaps-yet-to-be-enslaved] VF should never be directly
    configured, so we filter interfaces that duplicate any hv_netvsc mac
    address, as this the most reliable indicator that it is meant to be
    subordinate to the synthetic interface.

    VF drivers will be mlx4_core, mlx5_core, or mana.  However, given that
    this list of drivers has changed over time and mana's dependency on
    hv_netvsc is expected to be removed in the future, we no longer rely
    on these names. Note that this will not affect mlx4/5 instances outside
    of Hyper-V, as it only affects environments where hv_netvsc is present.
    cSs&i|]}|ddkr|d|d�qS)r��	hv_netvscr�rr�r�irrrrOUs z=filter_hyperv_vf_with_synthetic_interface.<locals>.<dictcomp>cs(g|]}|d�vr|ddkr|�qS)r�r�rirrj��hv_netvsc_mac_to_namerrrXs
�z=filter_hyperv_vf_with_synthetic_interface.<locals>.<listcomp>zdIgnoring %r VF interface with driver %r due to synthetic hv_netvsc interface %r with mac address %r.N)r�)rgr��interfaces_to_removerrr�rwr�rrlrrfAs"�
���rfcCsPi}t�D] \}}}}t|d�}|r%||vr!td||||f��|||<q|S)zTBuild a dictionary mapping Infiniband interface names to their hardware
    address.Fz5duplicate mac found! both '%s' and '%s' have mac '%s')r�r<r�)rfrr�r`rrr�get_ib_hwaddrs_by_interfaceks
���ro�convert_to_addressr�cKs(z	||fi|��WStyYdSw)aUse a function to return an address. If conversion throws a ValueError
    exception return False.

    :param check_cb:
        Test function, must return a truthy value
    :param address:
        The string to test.

    :return:
        Address or False

    F)rC)rpr��kwargsrrr�maybe_get_address{s

�rrcC�tttj|��S)z�Returns a bool indicating if ``s`` is an IP address.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IP address or not.
    )rdrr�	ipaddress�
ip_address�r�rrr�
is_ip_address��	rwcCrs)z�Returns a bool indicating if ``s`` is an IPv4 address.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IPv4 address or not.
    )rdrrrt�IPv4Addressrvrrr�is_ipv4_address�rxrzcCrs)z�Returns a bool indicating if ``s`` is an IPv6 address.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IPv4 address or not.
    )rdrrrt�IPv6Addressrvrrr�is_ipv6_address�rxr|cC�tttj|dd��S)z�Returns a bool indicating if ``s`` is an IPv4 or IPv6 network.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IPv4 address or not.
    F�r�)rdrrrt�
ip_networkrvrrr�
is_ip_network�s	r�cCr})z�Returns a bool indicating if ``s`` is an IPv4 network.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IPv4 address or not.
    Fr~)rdrrrt�IPv4Networkrvrrr�is_ipv4_network��	�r�cCr})z�Returns a bool indicating if ``s`` is an IPv6 network.

    :param address:
        The string to test.

    :return:
        A bool indicating if the string is an IPv4 address or not.
    Fr~)rdrrrt�IPv6Networkrvrrr�is_ipv6_network�r�r��subnetcCs t�|�}tj|dd�}||vS)z�Returns a bool indicating if ``s`` is in subnet.

    :param address:
        The string of IP address.

    :param subnet:
        The string of subnet.

    :return:
        A bool indicating if the string is in subnet.
    Fr~)rtrur)r�r�ru�subnet_networkrrr�is_ip_in_subnet�s
r��gatewayc
CsFzt||�WSty"}zt�d|||�WYd}~dSd}~ww)z�Returns a bool indicating if should add gateway onlink flag.

    :param gateway:
        The string of gateway address.

    :param subnet:
        The string of subnet.

    :return:
        A bool indicating if the string is in subnet.
    zDFailed to check whether gateway %s is contained within subnet %s: %sNF)r�rCr3r")r�r�r;rrr�should_add_gateway_onlink_flag�s���r�cCs@|d�d�s
|dtvrdS|ddkrt|�d��rdSdS)z:Common helper for checking network_state subnets for ipv6.r_�6T�staticr�F)�endswith�IPV6_DYNAMIC_TYPESr|r�)r�rrr�subnet_is_ipv6s
r�cCstt�d|���j�S)z�Convert a network prefix to an ipv4 netmask.

    This is the inverse of ipv4_mask_to_net_prefix.
        24 -> "255.255.255.0"
    Also supports input as a string.�0.0.0.0/)r�rtr��netmask)�prefixrrr�net_prefix_to_ipv4_masksr�cCst�d|���jS)aConvert an ipv4 netmask into a network prefix length.

    If the input is already an integer or a string representation of
    an integer, then int(mask) will be returned.
       "255.255.255.0" => 24
       str(24)         => 24
       "24"            => 24
    r�)rtr�	prefixlen)�maskrrr�ipv4_mask_to_net_prefixs	r�cCs�zt�d|���j}|WStyYnwt�|�}t|�}|dkr%|Sttj||d@���}||?}tj|}d|>d}||krKtd|��|S)z�Convert an ipv6 netmask (very uncommon) or prefix (64) to prefix.

    If the input is already an integer or a string representation of
    an integer, then int(mask) will be returned.
       "ffff:ffff:ffff::"  => 48
       "48"                => 48
    z::/rr�zInvalid network mask '%s')	rtrr�rCrur�min�
IPV6LENGTH�
bit_length)r�r�r��mask_int�trailing_zeroes�leading_ones�all_onesrrr�ipv6_mask_to_net_prefix's&�
�
r�r�r�cCsttj|�d|��dd�j�S)zCGet string representation of broadcast address from an ip/mask pairr#Fr~)r�rtr��broadcast_address)r�r�rrr�mask_and_ipv4_to_bcast_addrJs�r�c@seZdZdS)�RendererNotFoundErrorN)r�r�r�rrrrr�Qsr�)r")NNNNr�)F)T)TTN)TTTTTTF)er)�	functoolsrt�loggingrOr�typingrrrrr�	cloudinitrr�cloudinit.net.netops.iproute2r	�	getLoggerr�r3r r�r�rhrrr!r'r=rBrErKrRrTrWr\r^ra�	lru_cacherdrgr�rpr�rrrxr|r�r�rtrur�r�rsr�r�ryr�r�r�r�r�r�r�r�r�r�r�r�r�r�rr5r8r<r�rCr=r>r?r@r�rfrorrrwrzr|r�r�r�r�r�r�r�rr�r�r�r�r�rrrr�<module>s�


�
%

	






!	

H
0
/
�
H��������
�<��
�*	#

Anon7 - 2022
AnonSec Team