Prv8 Shell
Server : Apache
System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64
User : matalashes ( 1004)
PHP Version : 8.1.29
Disable Function : NONE
Directory :  /usr/src/cloud-init/cloudinit/net/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/src/cloud-init/cloudinit/net/__pycache__/__init__.cpython-36.pyc
3

$%we���@s|ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
Z
ddlmZmZddlmZmZeje�ZdZdZdd	d
dgZdd
dddddddddgZejd�fdd�Zdd�Zd�dd�Zd�dd �Zd�d!d"�Z d#d$�Z!d%d&�Z"d'd(�Z#d)d*�Z$d+d,�Z%d-d.�Z&d/d0�Z'd1d2�Z(ej)dd3�e*d4�d5d6��Z+ej)dd3�e,d4�d7d8��Z-e.e*d9�d:d;�Z/d�d<d=�Z0d>d?�Z1d@dA�Z2d�e*d4�dBdC�Z3d�dDdE�Z4d�dFdG�Z5dHdI�Z6dJdK�Z7dLdM�Z8dNdO�Z9dPdQ�Z:GdRdS�dSe;�Z<dTdU�Z=d�ee
e.e
e.dV�dWdX�Z>d�ee
e.ee.dV�dYdZ�Z?d�ee
e.e
e.dV�d[d\�Z@d�ee
e.ee.dV�d]d^�ZAd�ee
e.e
e.dV�d_d`�ZBd�ee
e.ee.dV�dadb�ZCd�ee
e.e
e.dV�dcdd�ZDd�ee
e.ee.dV�dedf�ZEd�dgdh�ZFdidj�ZGd�dldm�ZHd�dodp�ZId�dqdr�ZJdsdt�ZKdudv�ZLd�eMd4�dwdx�ZNe.ee.dy�dzd{�ZOd�eMd4�d|d}�ZPd�eMd4�d~d�ZQd�eMd4�d�d��ZRd�eMd4�d�d��ZSd�e,d4�d�d��ZTd�d��ZUe	e.efe*d��d�d��ZVee.d��d�d��ZWe.e*d��d�d��ZXe.e*d��d�d��ZYe.e*d��d�d��ZZe.e*d��d�d��Z[e.e*d��d�d��Z\e.e*d��d�d��Z]e*d4�d�d��Z^e.d4�d�d��Z_e`d4�d�d��Zae`d4�d�d��Zbe.e.e.d��d�d��ZcGd�d��d�ed�ZedS)��N)�Any�Callable�Dict�List�Optional)�urlparse)�subp�util)�UrlError�readurlz/sys/class/net/Zeth0Zdhcp6Z
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-statefulz	ovs-vsctlz--formatZcsvz
--no-headingsz	--timeout�10z	--columns�name�find�	interfacez
type=internalz([0-9]+)cCsdd�tj||�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|]}|j�rt|�n|j��qS�)�isdigit�int�lower)�.0�textrr�-/usr/src/cloud-init/cloudinit/net/__init__.py�
<listcomp>4sz$natural_sort_key.<locals>.<listcomp>)�re�split)�sZ_nsrerrr�natural_sort_key,srcCstS)z3Simple function to return the global SYS_CLASS_NET.)�
SYS_CLASS_NETrrrr�get_sys_class_path9sr�cCst�|d|S)N�/)r)�devname�pathrrr�sys_dev_path>sr"c
Cs�t||�}ytj|�}Wnpttfk
r�}zPt|dd�}	|	tjtjfkrZ|dk	rZ||�S|	tj	fkrv|dk	rv||�S�WYdd}~XnX|j
�}|dkr�|Sy||Stk
r�}z&|dk	r�||�Stj
d||��WYdd}~XnXdS)N�errnoz5Found unexpected (not translatable) value '%s' in '%s)r"r	�	load_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_netBs2
r5cCsdd�}t||||||d�S)NcSsdS)NFr)r4rrr�
on_excp_falsehsz(read_sys_net_safe.<locals>.on_excp_false)r1r0r2r/)r5)�iface�fieldr/r6rrr�read_sys_net_safegsr9cCs8t||�}|dkrdSyt|�Stk
r2dSXdS)NF)r9r�
ValueError)r7r8�valrrr�read_sys_net_intus
r<cCsdddd�}t|d|d�S)NTF)�up�unknown�down�	operstate)r/)r9)r r/rrr�is_upsrAcCstjjt|d��S)N�bridge)�osr!�existsr")r rrr�	is_bridge�srEcCstjjt|d��S)N�bonding)rCr!rDr")r rrr�is_bond�srGcCs t|dd�}tjj|�r|SdS)z8Return the master path for devname, or None if no master�master)r!N)r"rCr!rD)r r!rrr�
get_master�srIcCsHt|�}|dkrdStjj|d�}tjj|d�}tjj|�pFtjj|�S)z@Return a bool indicating if devname's master is a bridge or bondNFrFrB)rIrCr!�joinrD)r �master_pathZbonding_pathZbridge_pathrrr�master_is_bridge_or_bond�srLcCs,t|�}|dkrdSt|dd�}tjj|�S)z;Return a bool indicating if devname's master is openvswitchNFzupper_ovs-system)r!)rIr"rCr!rD)r rKZovs_pathrrr�master_is_openvswitch�s
rMcCst|d�dkS)N�type�32)r9)r rrr�is_ib_interface�srP)�maxsize)�returncCs ttjd��}|stjd�|S)zDReturn a bool indicating if Open vSwitch is installed in the system.z	ovs-vsctlz<ovs-vsctl not in PATH; not detecting Open vSwitch interfaces)�boolr�whichr-r.)�retrrr�openvswitch_is_installed�s
rVcCs^ytjt�\}}Wn>tjk
rP}z d|jkr>tjd�gS�WYdd}~Xn
X|j�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_CMD�ProcessExecutionError�stderrr-�info�
splitlines)�out�_err�excrrr�get_ovs_internal_interfaces�s
r_)r rRcCs,t�s
dSt�}||kr(tjd|�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)rVr_r-r.)r Zovs_bridgesrrr�!is_openvswitch_internal_interface�sr`cCs,|dkrt|�}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recCs,d}yt|d�}Wntk
r&YnX|S)zDReturns a str from reading /sys/class/net/<devname>/device/features.rzdevice/features)r5�	Exception)r �featuresrrr�get_dev_features�srhcCs*t|�}|st|�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)rh�len)r rgrrr�has_netfail_standby_feature�srmcCs<t|�dk	rdS|dkr 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)rIrarm)r rdrrr�is_netfail_masters	rocCstt|dd�}tjj|�sdS|dkr,t|�}|dkr8dStjjtjj|��}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.
    rH)r!FNrnT)r"rCr!rDra�basename�realpathrm)r rdZmaster_sysfs_pathZmaster_devnameZ
master_driverZmaster_has_standbyrrrrbsrbcCs<t|�dkrdS|dkr 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.
    NFrnT)rIrarm)r rdrrrrc:s	rccCst|d�}|r|dkrdSdS)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�4TF)rsrt)r9)r rrrrr�
is_renamedRs	
rucCstt|d��}d|j�kS)N�ueventzDEVTYPE=vlan)�strr9r[)r rvrrr�is_vlanasrxcCs0d}t|d�}tjj|�r,tjjtj|��}|S)z8Return the device driver for net device named 'devname'.Nz
device/driver)r"rCr!�islinkrp�readlink)r rdZdriver_pathrrrrafs

racCst|d�}|dkrdS|S)z;Return the device id string for net device named 'devname'.z
device/deviceFN)r9)r Zdev_idrrr�device_devidqs
r{cCsjtj�stj�rtt�j��Sytjt��}Wn6t	k
rd}z|j
t
jkrRg}n�WYdd}~XnX|S)N)r	�
is_FreeBSD�is_DragonFlyBSD�list�get_interfaces_by_mac�valuesrC�listdirrr%r#r()�devsr4rrr�get_devicelistzsr�c@seZdZdZdS)�ParserErrorz6Raised when a parser has issue parsing a file/content.N)�__name__�
__module__�__qualname__�__doc__rrrrr��sr�cCs$|st|t�rdS|jd�dkS)NF�config�disabled)�
isinstance�dict�get)�cfgrrr�is_disabled_cfg�sr�)�blacklist_driversrRcCs<tj�stj�rt|�Stj�s(tj�r0t|�St|�SdS)zqGet the list of network interfaces viable for networking.

    @return List of interfaces, sorted naturally.
    N)r	r|r}�find_candidate_nics_on_freebsd�	is_NetBSD�
is_OpenBSD�(find_candidate_nics_on_netbsd_or_openbsd�find_candidate_nics_on_linux)r�rrr�find_candidate_nics�s
r�cCs<tj�stj�rt|�Stj�s(tj�r0t|�St|�SdS)z.Get the name of the 'fallback' network device.N)r	r|r}�find_fallback_nic_on_freebsdr�r��&find_fallback_nic_on_netbsd_or_openbsd�find_fallback_nic_on_linux)r�rrr�find_fallback_nic�s
r�cCstt�j�td�S)z�Get the names of the candidate network devices on NetBSD/OpenBSD.

    @param blacklist_drivers: currently ignored
    @return list of sorted interfaces
    )�key)�sortedrr�r)r�rrrr��sr�cCst|�}|r|dSdS)z�Get the 'fallback' network device name on NetBSD/OpenBSD.

    @param blacklist_drivers: currently ignored
    @return default interface, or None
    rN)r�)r��namesrrrr��sr�cCs8tjddddg�\}}|j�}|r&|Stt�j�td�S)z�Get the names of the candidate network devices on FreeBSD.

    @param blacklist_drivers: Currently ignored.
    @return List of sorted interfaces.
    �ifconfigz-lz-u�ether)r�)rrr�rr�r)r��stdout�_stderrr�rrrr��s
r�cCst|�}|r|dSdS)z�Get the 'fallback' network device name on FreeBSD.

    @param blacklist_drivers: Currently ignored.
    @return List of sorted interfaces.
    rN)r�)r�r�rrrr��sr�cCs�|sg}dtj�kr tjd�n<dd�t�D�}t|�r\tjd|�d}tjtj|tjd�g}g}�xt�D�]}|dkr~qnt|�}||kr�tjd	||�qnt	|d
�s�tjd|�qn|j
d�r�tjd
|�qnt|�r�tjd|�qnt|�r�tjd|�qnt
|��rtjd|�qnt|d�}|�r.|j|�qntjd|�t|d�}|�rV|j|�qnt	|d�}	|	dk�rv|j|�qntjd|�qnWg}
xF||gD]:}t|td�}t|k�r�|jt�|jdt�|
|7}
�q�W|
S)z�Get the names of the candidate network devices on Linux.

    @param blacklist_drivers: Filter out NICs with these drivers.
    @return List of sorted interfaces.
    z
net.ifnames=0z9Stable ifnames disabled by net.ifnames=0 in /proc/cmdlinecSs"g|]}|dkrt|�r|�qS)�lo)ru)r�devicerrrr�sz0find_candidate_nics_on_linux.<locals>.<listcomp>z4Found unstable nic names: %s; calling udevadm settlez!Waiting for udev events to settle)�funcr�z%Ignoring interface with %s driver: %s�addressz"Ignoring interface without mac: %sZvethzIgnoring veth interface: %szIgnoring bridge interface: %szIgnoring bond interface: %szIgnoring failover interface: %s�carrierzInterface has no carrier: %s�dormantr@r?�lowerlayerdownr>zInterface ignored: %s)r�r)r�r?r�r>)r	�get_cmdliner-r.r�rl�log_time�udevadm_settlerar9�
startswithrErGrer<�appendr�r�DEFAULT_PRIMARY_INTERFACE�remove�insert)r�Zunstable�msgZ	connectedZpossibly_connectedrrdr�r�r@Zsorted_interfacesZ
interfacesrrrr��sv













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

    @param blacklist_drivers: Ignore devices with these drivers.
    @return List of sorted interfaces.
    rN)r�)r�r�rrrr�Bsr�cCsx|sd}t|d�}|sdSt|�r,d|i}ndt|d�j�i}d||d�}|rft|�}|rf||d	d
<||idd�}|S)
zBGenerate network cfg v2 for dhcp on the NIC most likely connected.F)r�Nr
�
macaddressr�T)Zdhcp4zset-name�matchr�rd�)�	ethernets�version)r�ror9rra)r�Z
config_driverZtarget_namer�r�rdZnconfrrr�generate_fallback_configQs

r�cCsJdd�}dd�}|jd�}|dkr*||�S|dkr:||�Std|��dS)	NcSs�g}x�|jdi�D]|}|jd�dkr&q|jd�}|s6q|jd�}|jdi�jd�}|jdi�jd�}|spt|�}|s|t|�}|j||||g�qW|S)	Nr�rNZphysicalZmac_addressr
�paramsrd�	device_id)r�rar{r�)�netcfg�physdevs�ent�macr
rdr�rrr�
_version_1ls 

z$extract_physdevs.<locals>._version_1cSs�g}x�|jdi�j�D]z}|jd�}|s*q|jdi�jd�}|sBq|jdi�jd�}|jdi�jd�}|srt|�}|s~t|�}|j||||g�qW|S)Nr�zset-namer�r�rdr�)r�r�rar{r�)r�r�r�r
r�rdr�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_physdevsks
r�FcCs*t|d�}|dkr"|rtd��dS|dkS)	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.Trr��)rr�r�)r<r:)�ifname�strictZassign_typerrr�interface_has_own_mac�s

r�Tc
Cs�i}x4t�D]*\}}}}d|||j�|t|�d�||<qW|r�tjd�}tjdddddd	d
gdd�\}}tjdd
ddgdd�\}	}t�}
x ||	fD]}|
j|j|��q�Wx,|j	�D] }|ddkp�|d|
k|d<q�W|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�rdr�r
r=z[0-9]+:\s+(\w+)[@:]�ipz-6�addrZshowZ	permanentZscope�globalT)�capturez-4r=Fr
r�)
�get_interfacesrrAr�compiler�set�update�findallr�)
Zcheck_downable�cur_infor
r�rdr�ZnmatchZipv6r]Zipv4Znics_with_addressesZ	bytes_out�drrr�_get_current_rename_info�s(
 r�cs�t|�stjd�dS|dkr$t�}i�xF|j�D]:\}}|j�}|jd�r\|dj�|d<||d<|�|<q2Wtjd���fdd�}dd�}d	d
�}	dd�}
g}g}g}
|��}d
}d"}dd����fdd�}�x�|D�]�\}}}}|r�|j�}g}||||�}|�s"|r�|jd||f�q�|jd�}||k�r8q�|�sV|r�|jd||f�q�|d�r�d}|d�s�|r�|j||||f�q�d|d<|jd|||ff�|
jd|||ff�||k�r�||}|d�rd}|d�s�|r�|j||||f�q�n|jd|||ff�d}x*|dk�s,||k�r@|d7}||}�qW|jd||||ff�||d<|��}|d�r�|
jd|||ff�|jd|||d|ff�||d<|��}||7}q�W||	|
d�}t|�t|
�dk�rt|��r�tjd|�ntjd|�n~tjd|||
�xj||
D]^\}}}}y|j|�|�Wn<t	k
�rz}z|jd |||||f�WYdd}~XnX�q Wt|��r�t
d!j|���dS)#Nzno interfaces to renamer�r
zDetected interfaces %scstdd��j�D��S)Ncss|]}|d|fVqdS)r
Nr)r�datarrr�	<genexpr>�sz<_rename_interfaces.<locals>.update_byname.<locals>.<genexpr>)r�r�)Zbymac)r�rr�
update_byname�sz)_rename_interfaces.<locals>.update_bynamecSstjddd|d|gdd�dS)Nr��linkr�r
T)r�)r)�cur�newrrr�rename�sz"_rename_interfaces.<locals>.renamecSstjddd|dgdd�dS)Nr�r�r�r?T)r�)r)r
rrrr?�sz _rename_interfaces.<locals>.downcSstjddd|dgdd�dS)Nr�r�r�r=T)r�)r)r
rrrr=�sz_rename_interfaces.<locals>.upz
cirename%dr�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�rdr�Fr)r�r�rdr�rrr�entry_matchsz'_rename_interfaces.<locals>.entry_matchcsT����fdd��j�D�}t|�rPt|�dkrHd|���f}t|��|dSdS)Ncsg|]}�|����r|�qSrr)rr�)r�rdr�r�rrrsz:_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�rlr:)r�rdr�r�r�)r�r�)r�rdr�r�
find_entrys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�)r�r?r=rz(unable to do any work for renaming of %sz$no work necessary for renaming of %sz$achieving renaming of %s with ops %sz.[unknown] Error performing %s%s for %s, %s: %s�
���)rlr-r.r��items�copyr�rr�rfr�rJ)�renamesZstrict_presentZstrict_busyZcurrent_infor
r�r�r�r�r?r=Zops�errorsZupsZ
cur_bynameZtmpname_fmtZtmpir�r��new_namerdr�Zcur_opsZcur_namer��targetZtmp_nameZopmap�opr�r4r)r�r�r�_rename_interfaces�s�










*
r�cCs$d}tjjt|d��rd}t||�S)z6Returns the string value of an interface's MAC Addressr�Z
bonding_slavezbonding_slave/perm_hwaddr)rCr!�isdirr"r9)r�r!rrr�get_interface_mac|sr�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.
    rNrO�$��3Ni�)r9r�)r�Zethernet_formatr�rrr�get_ib_interface_hwaddr�s
r�cCsLtj�stj�rt|d�Stj�r,t|d�Stj�r>t|d�St|d�SdS)N)r�)	r	r|r}� get_interfaces_by_mac_on_freebsdr��get_interfaces_by_mac_on_netbsdr�� get_interfaces_by_mac_on_openbsd�get_interfaces_by_mac_on_linux)r�rrrr�sr)r�rRcCs0x*t�j�D]\}}|j�|j�kr|SqWdS)N)rr�r)r�Z
interface_macZinterface_namerrr�find_interface_name_from_mac�sr�cCs>tjdddg�\}}dd�}dd�}dd	�|||��D�}|S)
Nr�z-ar�cssDd}x4|jd�D]&}|jd�r(||7}q|r2|V|}qW|VdS)Nrr��	)rr�)r\Z
curr_block�linerrr�flatten�s

z1get_interfaces_by_mac_on_freebsd.<locals>.flattencss8x2|D]*}tjd|�}|r|jd�|jd�fVqWdS)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>�sz4get_interfaces_by_mac_on_freebsd.<locals>.<dictcomp>)r)r�r\�_r�r��resultsrrrr��s
r�c	Csfi}d}tjddg�\}}tjdd|�j�}x4|D],}tj||�}|r2|j�}|d||d<q2W|S)NzE(?P<ifname>\w+).*address:\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�z-az\n\s+� r�r�)rr�subr[r��	groupdict)	r�rU�re_field_matchr\r��if_linesr�r��fieldsrrrr��s
r�c	Csfi}d}tjddg�\}}tjdd|�j�}x4|D],}tj||�}|r2|j�}|d||d<q2W|S)NzC(?P<ifname>\w+).*lladdr\s(?P<mac>([\da-f]{2}[:-]){5}([\da-f]{2})).*r�z-az\n\s+r�r�r�)rrr�r[r�r�)	r�rUrr\r�rr�r�rrrrr��s
r�c
Csi}i}�xt|d�D�]�\}}}}||kr�d}d||||f}|||kr�||dkrxtj|d||||f�q|dkr�d}tj|d|||||f�|dkr�tjd
||||�q|r�t|��|||<|||<t|d�}	|	r|	|k�r|||	<qtjd|||	|	�qW|S)
zmBuild a dictionary of tuples {mac: name}.

    Bridges and any devices that have a 'stolen' mac are excluded.)r�Tz6duplicate mac found! both '%s' and '%s' have mac '%s'.Z	hv_netvsczC Ignoring '%s' due to driver '%s' and '%s' having driver hv_netvsc.F�	fsl_enetc�
mscc_felix�qmi_wwanz>Ignoring duplicate macs from '%s' and '%s' due to driver '%s'.z^Ethernet and InfiniBand interfaces have the same address both '%s' and '%s' have address '%s'.)rrr)r�r-�warningr.r�r�)
r�rUZ
driver_mapr
r�rdZ_devidZraise_duplicate_mac_errorr��ib_macrrrr��sT		



r�cCs�g}|dkrg}t�}djd�}x�|D]�}t|�s4q&t|�r>q&t|�rHq&t|�rRq&t|�dk	rtt|�rtt|�rtq&t	|�r~q&t
|�}|s�q&|dkr�||dt|��kr�q&t|�r�q&t
|�}||kr�q&|j|||t|�f�q&W|S)z�Return list of interface tuples (name, mac, driver, device_id)

    Bridges and any devices that have a 'stolen' mac are excluded.N�:�00�r�)r	)r	r	r	r	r	r	r	r	r	r	r	r	r	r	r	r	)r�rJr�rErxrGrIrLrMrer�rlr`rar�r{)r�rUr�Zzero_macr
r�rdrrrr�MsB


r�cCsTi}xJt�D]@\}}}}t|d�}|r||krDtd||||f��|||<qW|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�)rUr
r�rrrr�get_ib_hwaddrs_by_interfacexs
r)�url_datarRcCs�d|krtjd|�dS|d}y6t|�}t|jdk|jdkg�sTtjd|j�dSWn,tk
r�}ztjd|�dSd}~XnXd	|kr�d
|d	<ytf|�Wntk
r�dSXdS)aDReturn true when the instance has access to the provided URL.

    Logs a warning if url is not the expected format.

    url_data is a dictionary of kwargs to send to readurl. E.g.:

    has_url_connectivity({
        "url": "http://example.invalid",
        "headers": {"some": "header"},
        "timeout": 10
    })
    �urlz4Ignoring connectivity check. No 'url' to check in %sF�http�httpsz2Ignoring connectivity check. Invalid URL scheme %sz+Ignoring connectivity check. Invalid URL %sN�timeout�T)r-rr�any�schemer:rr
)rr
�result�errrrr�has_url_connectivity�s,
r)�convert_to_addressr�cKs&y||f|�Stk
r dSXdS)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�rRcCstttj|��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.
    )rSr�	ipaddress�
ip_address)r�rrr�
is_ip_address�s	rcCstttj|��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.
    )rSrrZIPv4Address)r�rrr�is_ipv4_address�s	rcCstttj|��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.
    )rSrrZIPv6Address)r�rrr�is_ipv6_address�s	rcCstttj|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�)rSrr�
ip_network)r�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.
    F)r�)rSrr�IPv4Network)r�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.
    F)r�)rSrrZIPv6Network)r�rrr�is_ipv6_networks	r#cCs@|djd�s|dtkrdS|ddkr<t|jd��r<dSdS)z:Common helper for checking network_state subnets for ipv6.rN�6TZstaticr�F)�endswith�IPV6_DYNAMIC_TYPESrr�)Zsubnetrrr�subnet_is_ipv6s
r'cCsttjd|���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.z0.0.0.0/)rwrr!�netmask)�prefixrrr�net_prefix_to_ipv4_masksr*cCstjd|���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
    z0.0.0.0/)rr�	prefixlen)�maskrrr�ipv4_mask_to_net_prefix#s	r-c
Cs�ytjd|���j}|Stk
r*YnXtj|�}t|�}|dkrJ|Sttj||d@j��}||?}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')	rrr+r:rr�minZ
IPV6LENGTH�
bit_length)r,r+r(Zmask_intZtrailing_zeroesZleading_onesZall_onesrrr�ipv6_mask_to_net_prefix/s"

r0)r,r�rRcCsttj|�d|��dd�j�S)zCGet string representation of broadcast address from an ip/mask pairrF)r�)rwrr!Zbroadcast_address)r,r�rrr�mask_and_ipv4_to_bcast_addrRsr1c@seZdZdS)�RendererNotFoundErrorN)r�r�r�rrrrr2Ysr2)r)NNNN)N)N)N)N)N)N)N)N)N)N)N)N)N)NN)F)T)TTN)N)N)N)N)N)N)fr#�	functoolsr�loggingrCr�typingrrrrr�urllib.parser�	cloudinitrr	Zcloudinit.url_helperr
r�	getLoggerr�r-rr�r&rWr�rrr"r5r9r<rArErGrIrLrMrP�	lru_cacherSrVr~r_rwr`rerhrmrorbrcrurxrar{r�rfr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rrrrrrr r"r#r'r*rr-r0r1r�r2rrrr�<module>s�






	






!
	
Y
0

/

c+'	#

haha - 2025