%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python3.9/site-packages/cloudinit/net/__pycache__/
Upload File :
Create Path :
Current File : //usr/lib/python3.9/site-packages/cloudinit/net/__pycache__/__init__.cpython-39.pyc

a

'�Dg���
@s6ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
Z
mZddlmZe�e�ZdZdZgd�Zgd�Ze�d	�fd
d�Zdd
�Zd�dd�Zd�dd�Zd�dd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd �Z#d!d"�Z$d#d$�Z%ej&dd%�e'd&�d'd(��Z(ej&dd%�e)d&�d)d*��Z*e+e'd+�d,d-�Z,d�d.d/�Z-d0d1�Z.d2d3�Z/d�e'd&�d4d5�Z0d�d6d7�Z1d�d8d9�Z2d:d;�Z3d<d=�Z4d>d?�Z5d@dA�Z6dBdC�Z7GdDdE�dEe8�Z9dFdG�Z:e	e+d&�dHdI�Z;e
e+d&�dJdK�Z<e	e+d&�dLdM�Z=e
e+d&�dNdO�Z>e	e+d&�dPdQ�Z?e
e+d&�dRdS�Z@e	e+d&�dTdU�ZAe
e+d&�dVdW�ZBd�e
eCd&�dXdY�ZDdZd[�ZEd�d]d^�ZFd�d`da�ZGd�dbdc�ZHddde�ZIdfdg�ZJeCd&�dhdi�ZKe+e
e+dj�dkdl�ZLeCd&�dmdn�ZMeCd&�dodp�ZNeCd&�dqdr�ZOeCd&�dsdt�ZPd�e'e'e'e'e'e'e'e)du�dvdw�ZQedxe	ee+e+e+e+fddy�dzd{�ZRd|d}�ZSee+d~�dd��ZTe+e'd��d�d��ZUe+e'd��d�d��ZVe+e'd��d�d��ZWe+e'd��d�d��ZXe+e'd��d�d��ZYe+e'd��d�d��ZZe+e+e'd��d�d��Z[e+e+e'd��d�d��Z\e'd&�d�d��Z]e+d&�d�d��Z^e_d&�d�d��Z`e_d&�d�d��Zae+e+e+d��d�d��ZbGd�d��d�ec�ZddS)��N)�Callable�Dict�List�Optional�Tuple)�subp�util)�Iproute2z/sys/class/net/Zeth0)�dhcp6Z
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-stateful)�	ovs-vsctlz--formatZcsvz
--no-headingsz	--timeoutZ10z	--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|]}|��rt|�n|���qS�)�isdigit�int�lower)�.0�textrr�:/usr/lib/python3.9/site-packages/cloudinit/net/__init__.py�
<listcomp>2s�z$natural_sort_key.<locals>.<listcomp>)�re�split)�sZ_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=sr"c

Cst||�}zt�|�}Wn�ttfy�}znt|dd�}	|	tjtjfvrd|durd||�WYd}~S|	tj	fvr�|dur�||�WYd}~S�WYd}~n
d}~00|�
�}|dur�|Sz
||WSt�y}z8|dur�||�WYd}~St�
d||��WYd}~n
d}~00dS)N�errnoz5Found unexpected (not translatable) value '%s' in '%s)r"rZload_text_file�OSError�IOError�getattrr#�ENOENT�ENOTDIR�EINVAL�strip�KeyError�LOG�debug)
r r!�	translate�	on_enoent�on_keyerror�	on_einvalZdev_path�contents�eZe_errnorrr�read_sys_netAs4

�r4cCsdd�}t||||||d�S)NcSsdS�NFr)r3rrr�
on_excp_falsegsz(read_sys_net_safe.<locals>.on_excp_false)r0r/r1r.)r4)�iface�fieldr.r6rrr�read_sys_net_safefs�r9cCs:t||�}|durdSz
t|�WSty4YdS0dSr5)r9r�
ValueError)r7r8�valrrr�read_sys_net_intts

r<cCsdddd�}t|d|d�S)NTF)�up�unknown�down�	operstate)r.�r9)r r.rrr�is_up~srBcCstj�t|d��S)N�bridge��osr!�existsr"�r rrr�	is_bridge�srHcCstj�t|d��S)N�bondingrDrGrrr�is_bond�srJcCs t|dd�}tj�|�r|SdS)z8Return the master path for devname, or None if no master�master�r!N)r"rEr!rFrrrr�
get_master�srMcCsHt|�}|durdStj�|d�}tj�|d�}tj�|�pFtj�|�S)z@Return a bool indicating if devname's master is a bridge or bondNFrIrC)rMrEr!�joinrF)r �master_pathZbonding_pathZbridge_pathrrr�master_is_bridge_or_bond�srPcCs,t|�}|durdSt|dd�}tj�|�S)z;Return a bool indicating if devname's master is openvswitchNFzupper_ovs-systemrL)rMr"rEr!rF)r rOZovs_pathrrr�master_is_openvswitch�s
rQcCst|d�dkS)N�type�32rArGrrr�is_ib_interface�srT)�maxsize)�returncCs tt�d��}|st�d�|S)zDReturn a bool indicating if Open vSwitch is installed in the system.rz<ovs-vsctl not in PATH; not detecting Open vSwitch interfaces)�boolr�whichr,r-)�retrrr�openvswitch_is_installed�s�rZc
Cslzt�t�\}}WnLtjy^}z2d|jvrHt�d�gWYd}~S�WYd}~nd}~00|��SdS)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_CMDZProcessExecutionError�stderrr,�info�
splitlines)�out�_err�excrrr�get_ovs_internal_interfaces�s
�rb)r rVcCs,t�s
dSt�}||vr(t�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)rZrbr,r-)r Zovs_bridgesrrr�!is_openvswitch_internal_interface�srccCs,|durt|�}t||�s$t||�r(dSdS)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�ricCs*d}zt|d�}Wnty$Yn0|S)zDReturns a str from reading /sys/class/net/<devname>/device/features.rzdevice/features)r4�	Exception�r Zfeaturesrrr�get_dev_features�srlcCs(t|�}|rt|�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)rl�lenrkrrr�has_netfail_standby_feature�srqcCs<t|�durdS|dur t|�}|dkr,dSt|�s8dSdS)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�rMrdrqrgrrr�is_netfail_masters	rtcCstt|dd�}tj�|�sdS|dur,t|�}|dkr8dStj�tj�|��}t|�}|dkr`dSt|�}|spdSdS)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.
    rKrLFNrrT)r"rEr!rFrd�basename�realpathrq)r rhZmaster_sysfs_pathZmaster_devnameZ
master_driverZmaster_has_standbyrrrresrecCs<t|�durdS|dur t|�}|dkr,dSt|�s8dSdS)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.
    NFrrTrsrgrrrrf9s	rfcCst|d�}|r|dvrdSdS)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�4TFrA)r rwrrr�
is_renamedQs	
rzcCstt|d��}d|��vS)N�ueventzDEVTYPE=vlan)�strr9r^)r r{rrr�is_vlan`sr}cCs0d}t|d�}tj�|�r,tj�t�|��}|S)z8Return the device driver for net device named 'devname'.Nz
device/driver)r"rEr!�islinkru�readlink)r rhZdriver_pathrrrrdes

rdcCst|d�}|durdS|S)z;Return the device id string for net device named 'devname'.z
device/deviceFNrA)r Zdev_idrrr�device_devidps
r�c
Cslt��st��rtt����Szt�t��}Wn8t	yf}z |j
t
jkrPg}n�WYd}~n
d}~00|S�N)r�
is_FreeBSD�is_DragonFlyBSD�list�get_interfaces_by_mac�valuesrE�listdirrr$r#r')�devsr3rrr�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�sdS|�d�dkS)NF�configZdisabled)�
isinstance�dict�get)�cfgrrr�is_disabled_cfg�sr�cCs6t��st��rt�St��s&t��r,t�St�SdS)zqGet the list of network interfaces viable for networking.

    @return List of interfaces, sorted naturally.
    N)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�cCs6t��st��rt�St��s&t��r,t�St�SdS)z.Get the name of the 'fallback' network device.N)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�cCst�}|r|dSdS)zfGet the 'fallback' network device name on NetBSD/OpenBSD.

    @return default interface, or None
    rN)r���namesrrrr��sr�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�cCst�}|r|dSdS)z_Get the 'fallback' network device name on FreeBSD.

    @return List of sorted interfaces.
    rN)r�r�rrrr��sr�c
CsFdt��vrt�d�n,dd�t�D�}t|�rDt�d|�t��g}g}tddddddd�D]�\}}}}|d	krvq`|�d
�r�t�d|�q`t	|d�}|r�|�
|�q`t�d
|�t	|d�}|r�|�
|�q`t|d�}|dvr�|�
|�q`t�d|�q`g}||fD]:}	t|	t
d�}	t|	v�r6|	�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)rz)rZdevicerrrr�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�ZvethzIgnoring veth interface: %s�carrierzInterface has no carrier: %s�dormantr@)r�r?Zlowerlayerdownr>zInterface ignored: %sr�r)rZget_cmdliner,r-r�rpZudevadm_settle�get_interfaces�
startswithr<�appendr9r�r�DEFAULT_PRIMARY_INTERFACE�remove�insert)
ZunstableZ	connectedZpossibly_connectedr�_r�r�r@Zsorted_interfaces�
interfacesrrrr��s`���








r�cCst�}|r|dSdS)z]Get the 'fallback' network device name on Linux.

    @return List of sorted interfaces.
    rN)r�r�rrrr�sr�cCsjt�}|sdSt|�r d|i}ndt|d���i}|rJt|�}|rJ||d<dd||d�}||idd	�}|S)
zBGenerate network cfg v2 for dhcp on the NIC most likely connected.Nr�
macaddress�addressrhT)Zdhcp4r
�set-name�match�)�	ethernets�version)r�rtr9rrd)Z
config_driverZtarget_namer�rhr�Znconfrrr�generate_fallback_config+s$
��r�cCsJdd�}dd�}|�d�}|dkr*||�S|dkr:||�Std|��dS)	NcSs�g}|�di�D]|}|�d�dkr$q|�d�}|s4q|�d�}|�di��d�}|�di��d�}|snt|�}|szt|�}|�||||g�q|S)	Nr�rRZphysicalZmac_addressr�paramsrh�	device_id)r�rdr�r�)�netcfg�physdevs�ent�macrrhr�rrr�
_version_1Is 

z$extract_physdevs.<locals>._version_1cSs�g}|�di���D]z}|�d�}|s(q|�di��d�}|s@q|�di��d�}|�di��d�}|spt|�}|s|t|�}|�||||g�q|S)Nr�r�r�r�rhr�)r�r�rdr�r�)r�r�r�rr�rhr�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_addressZaddr_assign_typeNz%s had no addr_assign_type.T)rr��)r<r:)�ifname�strictZassign_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<q�|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�rhr�rr=z[0-9]+:\s+(\w+)[@:])�ipz-6�addr�showZ	permanentZscope�globalT)Zcapture)r�z-4r�r�r=Frr�)
r�rrBr�compiler�set�update�findallr�)
Zcheck_downable�cur_inforr�rhr�ZnmatchZipv6r`Zipv4Znics_with_addressesZ	bytes_out�drrr�_get_current_rename_info�s.�	
�
�r�csvt|�st�d�dS|dur$t�}i�|��D]:\}}|��}|�d�rZ|d��|d<||d<|�|<q0t�d��dd�}g}g}	g}
|��}d}d}
d	d
����fdd�}|D�]�\}}}}|r�|��}g}||||�}|s�|r�|	�d
||f�q�|�d�}||k�rq�|�s0|r�|	�d
||f�q�|d�r�d}|d�sb|r�|	�||||f�q�d|d<|�d|||ff�|
�d|||ff�||v�r\||}|d�r�d}|d�s�|r�|	�||||f�q�n|�d|||ff�d}|du�s||v�r|
d7}
||
}�q�|�d||||ff�||d<|��}|d�r\|
�d|||ff�|�d|||d|ff�||d<|��}||7}q�t	j
t	jt	jd�}t|�t|
�dk�r�t|	��r�t�
d||	�nt�d|�nzt�d|||
�||
D]^\}}}}z|||�Wn>t�yT}z$|	�d|||||f�WYd}~n
d}~00�q�t|	��rrtd�|	���dS)Nzno interfaces to renamer�rzDetected interfaces %scSstdd�|��D��S)Ncss|]}|d|fVqdS)rNr�r�datarrr�	<genexpr>��z<_rename_interfaces.<locals>.update_byname.<locals>.<genexpr>)r�r�)Zbymacrrr�
update_byname�sz)_rename_interfaces.<locals>.update_bynamez
cirename%d���cSsd|r0|r0|r0|d|ko.|d|ko.|d|kS|rP|rP|d|koN|d|kS|r`|d|kSdS)zmatch if set and in datar�rhr�Fr)r�r�rhr�rrr�entry_match�s
�
�z'_rename_interfaces.<locals>.entry_matchcsT����fdd����D�}t|�rPt|�dkrHd|���f}t|��|dSdS)Ncsg|]}�|����r|�qSrrr�)r�rhr�r�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�rpr:)r�rhr�r��msg�r�r�)r�rhr�r�
find_entry�s�
��z&_rename_interfaces.<locals>.find_entryz<[nic not present] Cannot rename mac=%s to %s, not available.r=z*[busy] Error renaming mac=%s from %s to %sr�Fr?z2[busy-target] Error renaming mac=%s from %s to %s.r��rename)r�r?r=rz1Unable 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�
)rpr,r-r��items�copyr�rr�r	Zlink_renameZ	link_downZlink_up�warningrjr�rN)�renamesZstrict_presentZstrict_busyZcurrent_inforr�Zcurr��ops�errorsZupsZ
cur_bynameZtmpname_fmtZtmpir�r��new_namerhr�Zcur_opsZcur_namer��targetZtmp_nameZopmap�opr�r3rr�r�_rename_interfaces�s�


��

��






�
���
r�cCs$d}tj�t|d��rd}t||�S)z6Returns the string value of an interface's MAC Addressr�Z
bonding_slavezbonding_slave/perm_hwaddr)rEr!�isdirr"r9)r�r!rrr�get_interface_macXsr�cCs>t|d�dkr:t|�}|r6|r6|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.
    rRrS�$i��3N)r9r�)r�Zethernet_formatr�rrr�get_ib_interface_hwaddrbs
r�cCs<t��st��rt�St��r$t�St��r2t�St�SdSr�)	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�rVcCs0t���D] \}}|��|��kr
|Sq
dSr�)r�r�r)r�Z
interface_macZinterface_namerrr�find_interface_name_from_mac{s
r�cCs<t�gd��\}}dd�}dd�}dd�|||��D�}|S)N)r��-ar�css@d}|�d�D]&}|�d�r&||7}q|r0|V|}q|VdS)Nrr��	)rr�)r_Z
curr_block�linerrr�flatten�s

z1get_interfaces_by_mac_on_freebsd.<locals>.flattencss4|D]*}t�d|�}|r|�d�|�d�fVqdS)Nz2^(?P<ifname>\S*): .*ether\s(?P<mac>[\da-f:]{17}).*r�r�)r�search�group)Z	flat_list�block�mrrr�find_mac�s�z2get_interfaces_by_mac_on_freebsd.<locals>.find_maccSsi|]\}}||�qSrr)rr�r�rrr�
<dictcomp>�r�z4get_interfaces_by_mac_on_freebsd.<locals>.<dictcomp>)r)r_r�r�r�resultsrrrr��s
r�cCsbi}d}t�ddg�\}}t�dd|���}|D],}t�||�}|r0|��}|d||d<q0|S)NzE(?P<ifname>\w+).*address:\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�r��\n\s+� r�r��rr�subr^r��	groupdict�rYZre_field_matchr_r�Zif_linesr�r�fieldsrrrr��s�r�cCsbi}d}t�ddg�\}}t�dd|���}|D],}t�||�}|r0|��}|d||d<q0|S)NzC(?P<ifname>\w+).*lladdr\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�r�rrr�r�r	rrrrr��s�r�cCs�i}t�D]�\}}}}||vrV|dvr<t�d||||�q
d||||f}t|��|||<t|d�}|r
||vr~|||<q
t�d||||�q
|S)zmBuild a dictionary of tuples {mac: name}.

    Bridges and any devices that have a 'stolen' mac are excluded.)Z	fsl_enetcZ
mscc_felixZqmi_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�r,r-r�r�r�)rYrr�rhZ_devidr��ib_macrrrr��s:��

�r�)�filter_hyperv_vf_with_syntheticr�r�r�r�r�r�rVcCs$|r
tjndd�}g}t�}	d�d�}
|	D]�}|r<t|�s<q*t|�rP|d|�q*|r^t|�r^q*t|�rr|d|�q*|r�t|�dur�t	|�s�t
|�s�q*t|�r�|d|�q*t|�}|s�|d	|�q*|r�|d
kr�||
dt
|��kr�q*|r�t|�r�q*t|�}
|�|||
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>r�z get_interfaces.<locals>.<lambda>�:)�00rrrrrrrrrrrrrrrzIgnoring bridge interface: %szIgnoring bond interface: %sNzIgnoring failover interface: %sz"Ignoring interface without mac: %sr�)r,r-r�rNr�rHr}rJrMrPrQrir�rprcrdr�r��)filter_hyperv_vf_with_synthetic_interface)rr�r�r�r�r�r��filtered_loggerrYr�Zzero_macrr�rhrrrr�sT


�
���

 �
r�).N)rr�rVcsXdd�|D���fdd�|D�}|D].}|\}}}}|d||�||�|�|�q$dS)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�irrrrUsz=filter_hyperv_vf_with_synthetic_interface.<locals>.<dictcomp>cs(g|] }|d�vr|ddkr|�qS)r�r�rrr�Zhv_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�)rr�Zinterfaces_to_removerrr�rhr�rrrrAs �
��rcCsPi}t�D]@\}}}}t|d�}|r
||vrBtd||||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�)rYrr�rrrr�get_ib_hwaddrs_by_interfaceks
��
r)�convert_to_addressr�cKs,z||fi|��WSty&YdS0dS)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

    FN)r:)rr��kwargsrrr�maybe_get_address{s
r)r�rVcCstttj|��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.
    )rWr�	ipaddress�
ip_address�r�rrr�
is_ip_address�s	r!cCstttj|��S)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.
    )rWrr�IPv4Addressr rrr�is_ipv4_address�s	r#cCstttj|��S)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.
    )rWrr�IPv6Addressr rrr�is_ipv6_address�s	r%cCstttj|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�)rWrr�
ip_networkr rrr�
is_ip_network�s	r(cCstttj|dd��S)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&)rWrr�IPv4Networkr rrr�is_ipv4_network�s	�r*cCstttj|dd��S)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&)rWrr�IPv6Networkr rrr�is_ipv6_network�s	�r,)r��subnetrVcCs 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&)rrr')r�r-rZsubnet_networkrrr�is_ip_in_subnet�s
r.)�gatewayr-rVc
CsJzt||�WStyD}zt�d|||�WYd}~dSd}~00dS)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.r:r,r�)r/r-r3rrr�should_add_gateway_onlink_flag�s�r0cCs@|d�d�s|dtvrdS|ddkr<t|�d��r<dSdS)z:Common helper for checking network_state subnets for ipv6.rR�6TZstaticr�F)�endswith�IPV6_DYNAMIC_TYPESr%r�)r-rrr�subnet_is_ipv6s
r4cCstt�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|rr)�netmask)�prefixrrr�net_prefix_to_ipv4_masksr8cCst�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
    r5)rr'�	prefixlen)�maskrrr�ipv4_mask_to_net_prefixs	r;cCs�zt�d|���j}|WSty*Yn0t�|�}t|�}|dkrJ|Sttj||d@���}||?}tj|}d|>d}||kr�td|��|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')	rr'r9r:rr�min�
IPV6LENGTH�
bit_length)r:r9r6Zmask_int�trailing_zeroes�leading_ones�all_onesrrr�ipv6_mask_to_net_prefix's$
�
rB)r:r�rVcCsttj|�d|��dd�j�S)zCGet string representation of broadcast address from an ip/mask pairrFr&)r|rr)�broadcast_address)r:r�rrr�mask_and_ipv4_to_bcast_addrJs�rDc@seZdZdS)�RendererNotFoundErrorN)r�r�r�rrrrrEQsrE)r)NNNN)N)N)N)N)N)N)F)T)TTN)TTTTTTF)er#�	functoolsrZloggingrEr�typingrrrrrZ	cloudinitrrZcloudinit.net.netops.iproute2r	Z	getLoggerr�r,rr�r3r[r�rrr"r4r9r<rBrHrJrMrPrQrT�	lru_cacherWrZr�rbr|rcrirlrqrtrerfrzr}rdr�r�rjr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr!r#r%r(r*r,r.r0r4r8rr;rBrDr�rErrrr�<module>s�


�
%


	






!
	

H0

/�

H��=�*	#

Zerion Mini Shell 1.0