HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/distros/__pycache__/networking.cpython-39.pyc
a

��`��@s~ddlZddlZddlZddlmZddlmZmZe�e�Z	e
ZeZ
Gdd�dejd�ZGdd�de�ZGd	d
�d
e�ZdS)�N)�subp)�net�utilc@s�eZdZdZdd�Zed�dd�Zdd�edd	�d
d�Ze	dd�d
d�Z
ed�dd�Zed�dd�Z
e	ed�dd�Zdd�dd�Zddd�ed�dd�Zed�dd�Zed�d d!�Zeed"�d#d$�Zed�d%d&�Zed�d'd(�Zed�d)d*�Zed�d+d,�Zdd-�eeed.�d/d0�Zeed1�d2d3�Zeed1�d4d5�Zejeed1�d6d7��Zeed1�d8d9�Zeed1�d:d;�Z eed1�d<d=�Z!eed1�d>d?�Z"ejdd@�dd�dAdB��Z#dCd-�e	eddD�dEdF�Z$ejeed1�dGdH��Z%dS)I�
Networkingz�The root of the Networking hierarchy in cloud-init.

    This is part of an ongoing refactor in the cloud-init codebase, for more
    details see "``cloudinit.net`` -> ``cloudinit.distros.networking``
    Hierarchy" in HACKING.rst for full details.
    cCs
d|_dS�N��blacklist_drivers��self�r�>/usr/lib/python3/dist-packages/cloudinit/distros/networking.py�__init__szNetworking.__init__��returncCst��Sr)r�_get_current_rename_infor	rrrrsz#Networking._get_current_rename_infoN��current_info)�renamesrcCstj||d�S)Nr)r�_rename_interfaces)r
rrrrrr szNetworking._rename_interfaces)�netcfgrcCs
t�|�Sr)r�apply_network_config_names�r
rrrrr#sz%Networking.apply_network_config_names)�devnamecCs
t�|�Sr)r�device_devid�r
rrrrr&szNetworking.device_devidcCs
t�|�Sr)r�
device_driverrrrrr)szNetworking.device_drivercCs
t�|�Sr)r�extract_physdevsrrrrr,szNetworking.extract_physdevsrcCstj|d�S�Nr)r�find_fallback_nic)r
rrrrr/szNetworking.find_fallback_nicF�r�
config_driver)r cCstj||d�S)Nr)r�generate_fallback_config)r
rr rrrr!2s�z#Networking.generate_fallback_configcCst��Sr)r�get_devicelistr	rrrr"9szNetworking.get_devicelistcCst��Sr)r�get_ib_hwaddrs_by_interfacer	rrrr#<sz&Networking.get_ib_hwaddrs_by_interface)r�ethernet_formatcCst�||�Sr)r�get_ib_interface_hwaddr)r
rr$rrrr%?sz"Networking.get_ib_interface_hwaddrcCs
t�|�Sr)r�get_interface_macrrrrr&DszNetworking.get_interface_maccCst��Sr)r�get_interfacesr	rrrr'GszNetworking.get_interfacescCstj|jd�Sr)r�get_interfaces_by_macrr	rrrr(Js�z Networking.get_interfaces_by_maccCs
t�|�Sr)r�
get_masterrrrrr)NszNetworking.get_master��strict)rr+rcCstj||d�S)Nr*)r�interface_has_own_mac)r
rr+rrrr,Qsz Networking.interface_has_own_mac�rrcCs
t�|�Sr)r�is_bondrrrrr.VszNetworking.is_bondcCs
t�|�Sr)r�	is_bridgerrrrr/YszNetworking.is_bridgecCsdS)z�
        Is ``devname`` a physical network device?

        Examples of non-physical network devices: bonds, bridges, tunnels,
        loopback devices.
        Nrrrrr�is_physical\szNetworking.is_physicalcCs
t�|�Sr)r�
is_renamedrrrrr1eszNetworking.is_renamedcCs
t�|�Sr)r�is_uprrrrr2hszNetworking.is_upcCs
t�|�Sr)r�is_vlanrrrrr3kszNetworking.is_vlancCs
t�|�Sr)r�master_is_bridge_or_bondrrrrr4nsz#Networking.master_is_bridge_or_bond��existscCsdS)a�Wait for device population in the system to complete.

        :param exists:
            An optional optimisation.  If given, only perform as much of the
            settle process as is required for the given DeviceName to be
            present in the system.  (This may include skipping the settle
            process entirely, if the device already exists.)
        :type exists: Optional[DeviceName]
        Nr�r
r6rrr�settleqszNetworking.settleT)rr+rcCs�|�|�}tdd�|D��}t|���}|����}tdd�D]v}|�|�r\t�d�dS|�	|�}t�d|�|D]0}	||	}
d�
|
�}tjtj||j
d	|
id
�qv|����}q>d|}t�|�|r�t|��dS)a�Wait for all the physical devices in `netcfg` to exist on the system

        Specifically, this will call `self.settle` 5 times, and check after
        each one if the physical devices are now present in the system.

        :param netcfg:
            The NetworkConfig from which to extract physical devices to wait
            for.
        :param strict:
            Raise a `RuntimeError` if any physical devices are not present
            after waiting.
        cSsg|]}|d|df�qS)r�r)�.0�ifacerrr�
<listcomp>��z0Networking.wait_for_physdevs.<locals>.<listcomp>r�z*net: all expected physical devices presentNz)net: waiting for expected net devices: %szWaiting for settle or {} existsr6)�func�kwargsz-Not all expected physical devices present: %s)r�dict�set�keysr(�range�issubset�LOG�debug�
difference�formatr�log_timer8�warning�RuntimeError)r
rr+�physdevsZexpected_ifacesZ
expected_macsZpresent_macs�_�missing�macr�msgrrr�wait_for_physdevs}s0




�
zNetworking.wait_for_physdevscCsdS)z=Try setting the link to up explicitly and return if it is up.Nrrrrr�try_set_link_up�szNetworking.try_set_link_up)&�__name__�
__module__�__qualname__�__doc__r
rAr�listr�
NetworkConfigr�
DeviceNamerrrr�boolr!r"r#r%r&r'r(r)r,r.r/�abc�abstractmethodr0r1r2r3r4r8rRrSrrrrrsV�������6r)�	metaclassc@sDeZdZdZeed�dd�Zdd�dd�dd	�Zeed�d
d�ZdS)�
BSDNetworkingz>Implementation of networking functionality shared across BSDs.r-cCs
t��dSr��NotImplementedErrorrrrrr0�szBSDNetworking.is_physicalNr5rcCsdS)z0BSD has no equivalent to `udevadm settle`; noop.Nrr7rrrr8�szBSDNetworking.settlecCs
t��dSrr`rrrrrS�szBSDNetworking.try_set_link_up)	rTrUrVrWrZr[r0r8rSrrrrr_�sr_c@s�eZdZdZeed�dd�Zeed�dd�Zeed�dd�Z	eed�d	d
�Z
eed�dd�Zeed�d
d�Zeed�dd�Z
dd�dd�dd�Zeed�dd�ZdS)�LinuxNetworkingzCImplementation of networking functionality common to Linux distros.r-cCs
t�|�Sr)r�get_dev_featuresrrrrrc�sz LinuxNetworking.get_dev_featurescCs
t�|�Sr)r�has_netfail_standby_featurerrrrrd�sz+LinuxNetworking.has_netfail_standby_featurecCs
t�|�Sr)r�is_netfailoverrrrrre�szLinuxNetworking.is_netfailovercCs
t�|�Sr)r�is_netfail_masterrrrrrf�sz!LinuxNetworking.is_netfail_mastercCs
t�|�Sr)r�is_netfail_primaryrrrrrg�sz"LinuxNetworking.is_netfail_primarycCs
t�|�Sr)r�is_netfail_standbyrrrrrh�sz"LinuxNetworking.is_netfail_standbycCstj�t�|d��S)N�device)�os�pathr6r�sys_dev_pathrrrrr0�szLinuxNetworking.is_physicalNr5rcCs"|durt�|�}tj|d�dS)Nr5)rrlr�udevadm_settler7rrrr8�s
zLinuxNetworking.settlecCst�ddd|dg�|�|�S)z�Try setting the link to up explicitly and return if it is up.
           Not guaranteed to bring the interface up. The caller is expected to
           add wait times before retrying.�ip�linkrB�up)rr2rrrrrS�szLinuxNetworking.try_set_link_up)rTrUrVrWrZ�strrcr[rdrerfrgrhr0r8rSrrrrrb�srb)r\�loggingrj�	cloudinitrrr�	getLoggerrTrFrqrZrArY�ABCMetarr_rbrrrr�<module>s
'