Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.52 (Ubuntu)
System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
User : www-data ( 33)
PHP Version : 8.1.2-1ubuntu2.21
Disable Function : NONE
Directory :  /lib/python3/dist-packages/cloudinit/net/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

}��f��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddl
mZddlmZmZmZmZmZmZddlZddlmZmZmZddlmZmZe�e�Z dZ!d	Z"d
Z#dZ$Gdd
�d
e%�Z&Gdd�de&�Z'Gdd�de&�Z(Gdd�de&�Z)	d%dee*effdd�Z+dd�Z,d&dd�Z-d&dd�Z.Gdd�dej/�Z0Gdd �d e0�Z1Gd!d"�d"e0�Z2Gd#d$�d$e0�Z3e2e1e3gZ4dS)'�N)�suppress)�StringIO)�TimeoutExpired)�Any�Callable�Dict�List�Optional�Tuple)�subp�
temp_utils�util)�get_interface_mac�is_ib_interfacez/run/systemd/netif/leasesz/var/lib/dhclientz.+\.leases?$aN#!/bin/sh
log() {
    echo "udhcpc[$PPID]" "$interface: $2"
}
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
case $1 in
    bound|renew)
    cat <<JSON > "$LEASE_FILE"
{
    "interface": "$interface",
    "fixed-address": "$ip",
    "subnet-mask": "$subnet",
    "routers": "${router%% *}",
    "static_routes" : "${staticroutes}"
}
JSON
    ;;
    deconfig)
    log err "Not supported"
    exit 1
    ;;
    leasefail | nak)
    log err "configuration failed: $1: $message"
    exit 1
    ;;
    *)
    echo "$0: Unknown udhcpc command: $1" >&2
    exit 1
    ;;
esac
c@�eZdZdZdS)�NoDHCPLeaseErrorz'Raised when unable to get a DHCP lease.N��__name__�
__module__�__qualname__�__doc__�rr�4/usr/lib/python3/dist-packages/cloudinit/net/dhcp.pyrA�rc@r)�InvalidDHCPLeaseFileErrorz�Raised when parsing an empty or invalid dhclient.lease file.

    Current uses are DataSourceAzure and DataSourceEc2 during ephemeral
    boot to scrape metadata.
    NrrrrrrErrc@r)�NoDHCPLeaseInterfaceErrorz7Raised when unable to find a viable interface for DHCP.NrrrrrrMrrc@r)�NoDHCPLeaseMissingDhclientErrorz$Raised when unable to find dhclient.NrrrrrrQrr�returncCs2|p|j}|durt�d�t��|j�|||�S)aPerform dhcp discovery if nic valid and dhclient command exists.

    If the nic is invalid or undiscoverable or dhclient command is not found,
    skip dhcp_discovery and return an empty dict.

    @param nic: Name of the network interface we want to run dhclient on.
    @param dhcp_log_func: A callable accepting the dhclient output and error
        streams.
    @return: A list of dicts representing dhcp options for each lease obtained
        from the dhclient discovery if run, otherwise an empty list is
        returned.
    Nz1Skip dhcp_discovery: Unable to find fallback nic.)�fallback_interface�LOG�debugr�dhcp_client�dhcp_discovery)�distro�nic�
dhcp_log_func�	interfacerrr�maybe_perform_dhcp_discoveryUs


r'cCsttjt|�dd��S)z�Parse a systemd lease file content as in /run/systemd/netif/leases/

    Parse this (almost) ini style file even though it says:
      # This is private data. Do not parse.

    Simply return a dictionary of key/values.F)�list_values)�dict�	configobj�	ConfigObjr)�contentrrr�networkd_parse_leaselsr-cCsP|durt}i}tj�|�s|St�|�D]}tt�tj�||���||<q|S)z�Return a dictionary of dictionaries representing each lease
    found in lease_d.i

    The top level key will be the filename, which is typically the ifindex.N)	�NETWORKD_LEASES_DIR�os�path�isdir�listdirr-r
�load_text_file�join)�leases_d�ret�lfilerrr�networkd_load_leasesws
�r8cCsF|durt}t|d�}t|���D]\}}|�|�r ||SqdS)N)r5)r.r8�sorted�items�get)�keynamer5�leases�_ifindex�datarrr�networkd_get_option_from_leases�s

�r@c
@s�eZdZdZdZdd�Zedd��Zedd��Zed	e	fd
d��Z
ed	e	fdd
��Zej
de	dee	effdd��Zeej
de	deee	e	ffdd���Zej
		dde	deedee	effdd��ZdS)�
DhcpClient��
cCst�|j�|_|js
t��dS�N)r�which�client_name�dhcp_client_pathr��selfrrr�__init__�s�zDhcpClient.__init__cCstjd|jgddgd�dS)N�pkillr���rcs)rrF)�clsrrr�kill_dhcp_client�szDhcpClient.kill_dhcp_clientcCs*|��t�d�}|D]}t�|�qdS)Nz/var/lib/dhcp/*)rP�globr/�remove)rO�files�filerrr�clear_leases�s

�zDhcpClient.clear_leases�dhcp_interfacecCs|jd|j|ddgd�dS)N�startrrLrM��manage_servicerF�rOrVr#rrr�
start_service�s
�zDhcpClient.start_servicecCs|jd|jddgd�dS)N�stoprrLrMrXrZrrr�stop_service�szDhcpClient.stop_servicer&rcC�iS)z�Get the most recent lease from the ephemeral phase as a dict.

        Return a dict of dhcp options. The dict contains key value
        pairs from the most recent lease.
        r�rIr&rrr�get_newest_lease�szDhcpClient.get_newest_lease�routescCsgS)ap
        parse classless static routes from string

        The tuple is composed of the network_address (including net length) and
        gateway for a parsed static route.

        @param routes: string containing classless static routes
        @returns: list of tuple(str, str) for all valid parsed routes until the
                  first parsing error.
        r)rarrr�parse_static_routes�s
zDhcpClient.parse_static_routesNr%cCr^)a�Run dhcp client on the interface without scripts or filesystem
        artifacts.

        @param interface: Name of the network interface on which to send a
            dhcp request
        @param dhcp_log_func: A callable accepting the client output and
            error streams.
        @param distro: a distro object for network interface manipulation
        @return: dict of lease options representing the most recent dhcp lease
            parsed from the dhclient.lease file
        r)rIr&r%r#rrrr"�szDhcpClient.dhcp_discovery�NN)rrrrF�timeoutrJ�classmethodrPrU�strr[r]�abc�abstractmethodrrr`�staticmethodrr
rbr	rr"rrrrrA�s6

"
���
�rAc	s�eZdZdZ�fdd�Zededeeee	ffdd��Z
edd	��Zd
edeee	ffdd�Z	
	
dd
ede
edeee	ffdd�Zededeeeeffdd��Zede
efdd��Zdefdd�Z�ZS)�IscDhclient�dhclientcst���d|_dS)Nz/run/dhclient.lease��superrJ�
lease_filerH��	__class__rrrJ��

zIscDhclient.__init__�
lease_contentrcCs�t�dtj�}g}t|�dkrgS|�|�D]:}g}|�d�D]}|���dd��dd�}|r8|�|�dd��qt	|�}|�
d	�}|rKt�|�|d	<|�|�q|S)
z�parse the content of a lease file

        @param lease_content: a string containing the contents of an
            isc-dhclient lease
        @return: a list of leases, most recent last
        zlease {(?P<lease>.*?)}\nr�;�"rBzoption � rL�unknown-245)
�re�compile�DOTALL�len�findall�split�strip�replace�appendr)r;rj�get_ip_from_lease_value)rr�lease_regex�dhcp_leases�lease�
lease_options�line�options�opt_245rrr�parse_leases�s&�
�zIscDhclient.parse_leasescCsx|�dd�}t|�dkr2d}|�d�D]}t|�dkrd|}||7}qt�dt|�dd�d��}n|�d	�}t�|�S)
N�\rB��:rL�0z>L�zutf-8)	r~rzr|�struct�pack�int�encode�socket�	inet_ntoa)�fallback_lease_value�unescaped_value�
hex_string�hex_pair�packed_bytesrrrr�s
�

z#IscDhclient.get_ip_from_lease_valuer&cCsrtt��+t�|j�}|r|�|�}|r'|dWd�SWd�iSWd�iS1s2wYiS)a�Get the most recent lease from the ephemeral phase as a dict.

        Return a dict of dhcp options. The dict contains key value
        pairs from the most recent lease.

        @param interface: an interface string - not used in this class, but
            required for function signature compatibility with other classes
            that require a distro object
        @raises: InvalidDHCPLeaseFileError on empty or unparsable leasefile
            content.
        ���N)r�FileNotFoundErrorr
r3rnr�)rIr&r,r�rrrr`s

�
��
��zIscDhclient.get_newest_leaseNr%c
Csht�d|�d}d}d}t|j|�}t|jd�}tt��t�|�t�|j�Wd�n1s4wY|j	�
|�t|�rhdt|�dd�}	d||	f}
t
jd	d
�}tj�||d�}t�||
�zt�|�|j|j|||��\}}
Wntjy�}zt�d|j|j|j�t|�d}~wwtj||jg|dd
�}|r�t�dd�dd�|D���iSd}d}d}d}t|�D]M}z
t�|���}t|�}Wnty�d|�d�}Yn*t y�d|�d�}Ynw|�!|�}|dk�rt�d|�t�"|t#j$�d	}nt%�&|�q�t�|�|�st�'d||d�|du�r'|||
�|�(|�}|�r1|St)��)a�Run dhclient on the interface without scripts/filesystem artifacts.

        @param interface: Name of the network interface on which to send a
            dhcp request
        @param dhcp_log_func: A callable accepting the dhclient output and
            error streams.
        @param distro: a distro object for network interface manipulation
        @return: dict of lease options representing the most recent dhcp lease
            parsed from the dhclient.lease file
        �!Performing a dhcp discovery on %sz/run/dhclient.pidN�{�G�z�?�z20:%s�$z0interface "%s" {send dhcp-client-identifier %s;}T��	needs_exez-dhclient.confz3dhclient exited with code: %s stderr: %r stdout: %r)�maxwait�naplenz+dhclient did not produce expected files: %sz, css�|]	}tj�|�VqdSrD)r/r0�basename)�.0�frrr�	<genexpr>}s�z-IscDhclient.dhcp_discovery.<locals>.<genexpr>�unknownFrB�No PID file found at z, dhclient is still running�PID file contained [z], dhclient is still runningrLzkilling dhclient with pid=%szCdhclient(pid=%s, parentpid=%s) failed to daemonize after %s secondsg$@)*rr r�rdrr�r/rRrn�net_ops�link_uprrr�get_tmp_ancestorr0r4r
�
write_filer�build_dhclient_cmdrG�ProcessExecutionError�	exit_code�stderr�stdoutr�wait_for_files�warning�ranger3r}�
ValueError�
get_proc_ppid�kill�signal�SIGKILL�time�sleep�errorr`r)rIr&r%r#�pid_file�config_file�
sleep_time�sleep_cyclesr��dhcp_client_identifier�interface_dhclient_content�tmp_dir�out�errr��missing�ppid�
daemonized�pid_content�	debug_msg�_�pidr�rrrr"&s�

������	�����
�
��


�


zIscDhclient.dhcp_discoveryracs8|�d��dd�t�d��D�}g}d�vrdd�|D�}�fdd�}d	}t|�D�]o\}}||kr3q)t|�}|td
d�vrzd}t||d
��|krZ|||t||d
���|Sd�||d|d��}	d�||d||��}
||}�n|tdd
�vr�d}t||d
��|kr�|||t||d
���|Sd�||d|d�dg�}	d�||d||��}
||}n�|tdd�v�rd}t||d
��|kr�|||t||d
���|Sd�||d|d�ddg�}	d�||d||��}
||}n�|tdd�v�rNd}t||d
��|k�r+|||t||d
���|Sd�||d|d�gd��}	d�||d||��}
||}n@|d	k�r�d}t||d
��|k�rp|||t||d
���|Sd}	d�||d||��}
||}n
t�	d|�|S|�
d|	|f|
f�q)|S)a(
        parse rfc3442 format and return a list containing tuple of strings.

        The tuple is composed of the network_address (including net length) and
        gateway for a parsed static route.  It can parse two formats of
        rfc3442, one from dhcpcd and one from dhclient (isc).

        @param rfc3442: string in rfc3442 format (isc or dhcpd)
        @returns: list of tuple(str, str) for all valid parsed routes until the
            first parsing error.

        e.g.:

        sr=parse_static_routes(        "32,169,254,169,254,130,56,248,255,0,130,56,240,1")
        sr=[
            ("169.254.169.254/32", "130.56.248.255"),         ("0.0.0.0/0", "130.56.240.1")
        ]

        sr2 = parse_static_routes(        "24.191.168.128 192.168.128.1,0 192.168.128.1")
        sr2 = [
            ("191.168.128.0/24", "192.168.128.1"),        ("0.0.0.0/0", "192.168.128.1")
        ]

        # unknown-121 option format
        sr3 = parse_static_routes(        "0:a:0:0:1:20:a8:3f:81:10:a:0:0:1:20:a9:fe:a9:fe:a:0:0:1")
        sr3 = [
            ("0.0.0.0/0", "10.0.0.1"),
            ("168.63.129.16/32", "10.0.0.1"),
            ("169.254.169.254/32", "10.0.0.1"),
        ]

        Python version of isc-dhclient's hooks:
           /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes
        rscSsg|]}|r|�qSrr�r��tokrrr�
<listcomp>�sz3IscDhclient.parse_static_routes.<locals>.<listcomp>z[, . :]r�cSsg|]	}tt|d���qS)r�)rfr�r�rrrr��scsd|||�f}t�|�dS)Nz�RFC3442 string malformed.  Current route has CIDR of %s and requires %s significant octets, but only %s remain. Verify DHCP rfc3442-classless-static-routes value: %s)rr�)�cidr�required�remain�msg��rfc3442rr�_trunc_error�s

��z5IscDhclient.parse_static_routes.<locals>._trunc_errorr��!�	N�.rL���r�r����r�)r�r�r�z0.0.0.0zSParsed invalid net length "%s".  Verify DHCP rfc3442-classless-static-routes value.z%s/%s)�rstriprwr|�	enumerater�r�rzr4rr�r)ra�tokens�
static_routesr��current_idx�idxr��
net_length�req_toks�net_address�gatewayrr�rrb�s|
*	 
"
�


��zIscDhclient.parse_static_routesc		Cs�d}|j|jfttffD]C\}}|sqg}zt�|�}Wn	ty%Yqwd}|D]}t�||�s3q*tj	�
||�}tj	�|�}||krH|}|}q*|rO|SqdS)z�Get the latest lease file from a distro-managed dhclient

        Doesn't consider the ephemeral timeframe lease.

        @param distro: used for distro-specific lease location and filename
        @return: The most recent lease file, or None
        Ng�)�dhclient_lease_directory�dhclient_lease_file_regex�DHCLIENT_FALLBACK_LEASE_DIR�DHCLIENT_FALLBACK_LEASE_REGEXr/r2r�rw�searchr0r4�getmtime)	r#�latest_file�	directory�regex�lease_files�latest_mtime�fname�abs_path�mtimerrr�!get_newest_lease_file_from_distro%s8	�����z-IscDhclient.get_newest_lease_file_from_distro�keycCsR|�|�}|r#t�|�}|r%t|�|��D]}|�|�}|r"|SqdSdSdS)a8Get a key from the latest lease from distro-managed dhclient

        Doesn't consider the ephemeral timeframe lease.

        @param lease_dir: distro-specific lease to check
        @param lease_file_regex: distro-specific regex to match lease name
        @return: The most recent lease file, or None
        N)r�r
r3�reversedr�r;)rIr#r�rnr,r��serverrrr�get_key_from_latest_leaseQs
	

��z%IscDhclient.get_key_from_latest_leaserc)rrrrFrJrirfrrrr�r�r`r	rr"r
rbr�r��
__classcell__rrrorrj�s. 
���

� w+rjc	@s�eZdZdZdZ		ddedeedeee	ffdd�Z
ed	ed
e
deefdd��Zed
ededefdd��Zdedeee	ffdd�Zededeeeeffdd��ZdS)�Dhcpcd�dhcpcdi,Nr&r%rc
Cs�t�d|�d}t|j|�}g}|j�|�z�t|�rdg}|jdddddg|�|�}tj||jd	�\}}	|d
ur?|||	�|�	|�}
|
r�t�g|�d��j
��}d
}d}
d
}t|�D]b}z't
�|���}t|�}|�|�}
|
r�t�d||
�t�|
tj�W|
WSWn.ty�t�d|
�Y|
WSty�d|�d�}Ynty�d|�d�}Ynw|
WSt�|�q\t�|�|
WStd��ty�}zt�d|j|j|j
�t|�d
}~wtjy�}zt�d|j|j|j
�t|�d
}~ww)a�Run dhcpcd on the interface without scripts/filesystem artifacts.

        @param interface: Name of the network interface on which to send a
            dhcp request
        @param dhcp_log_func: A callable accepting the client output and
            error streams.
        @param distro: a distro object for network interface manipulation
        @return: dict of lease options representing the most recent dhcp lease
            parsed from the dhclient.lease file
        r�r�z
--clientid�
--ipv4onlyz--waitipz--persistentz--noarpz--script=/bin/true)rdNz-PFrBz!killing dhcpcd with pid=%s gid=%sz9Process group id [%s] has already exited, nothing to killr�z, dhcpcd is still runningr�z], dhcpcd is still runningzNo lease foundz8dhcpcd timed out after %s seconds: stderr: %r stdout: %r�1dhcpcd exited with code: %s stderr: %r stdout: %r)rr r�rdr�r�rrGrr`r�r}r�r
r3�
get_proc_pgidr/�killpgr�r��ProcessLookupErrorr�r�r�r�rrr�r�r�)rIr&r%r#r�r��infiniband_argument�commandr�r�r�r�r��gidr�r�r�r�rrrr"hs����

�


����
�
��

�����zDhcpcd.dhcp_discoveryr?�dhcp_option_numbercCs>d}dtdtfdd�}|||�D]\}}||kr|SqdS)aVget a specific option from a binary lease file

        This is required until upstream dhcpcd supports unknown option 245
        upstream bug: https://github.com/NetworkConfiguration/dhcpcd/issues/282

        @param data: Binary lease data
        @param number: Option number to return
        @return: the option (bytes) or None
        ��r?�indexcssl�t|�|dkr4||}|d|}|d|d||�}||fVd||}t|�|dks	dSdS)z�options are variable length, and consist of the following format

            option number: 1 byte
            option length: 1 byte
            option data: variable length (see length field)
            r�rLN)rz)r?r�code�length�optionrrr�iter_options�s�
�z>Dhcpcd.parse_unknown_options_from_packet.<locals>.iter_optionsN)�bytesr�)r?r
�INDEXrr
rrrr�!parse_unknown_options_from_packet�s�z(Dhcpcd.parse_unknown_options_from_packet�
lease_dumpc

Cst�d||�z$tdd�|���dd��d�D��}|s*d}t�||�t||��Wnty@}z	t�d|�t|�d	}~ww||d
<dd�|�	�D�}d
dd�}|�	�D]\}}||vrf|�
|�||<qWt�d|�d��}t
�|d�}	|	rt�|	�|d<|S)a`parse the output of dhcpcd --dump

        map names to the datastructure we create from dhclient

        example dhcpcd output:

        broadcast_address='192.168.15.255'
        dhcp_lease_time='3600'
        dhcp_message_type='5'
        dhcp_server_identifier='192.168.0.1'
        domain_name='us-east-2.compute.internal'
        domain_name_servers='192.168.0.2'
        host_name='ip-192-168-0-212'
        interface_mtu='9001'
        ip_address='192.168.0.212'
        network_number='192.168.0.0'
        routers='192.168.0.1'
        subnet_cidr='20'
        subnet_mask='255.255.240.0'
        z)Parsing dhcpcd lease for interface %s: %rcSs"g|]
}d|vr|jddd��qS)�=rL)�maxsplit)r|)r��arrrr�(s
�z-Dhcpcd.parse_dhcpcd_lease.<locals>.<listcomp>�'rB�
z;No valid DHCP lease configuration found in dhcpcd lease: %rzError parsing dhcpcd lease: %rNr&cSsi|]\}}|�dd�|�qS)r��-)r~)r�r��valuerrr�
<dictcomp>=sz-Dhcpcd.parse_dhcpcd_lease.<locals>.<dictcomp>z
fixed-addressr�)z
ip-addresszclassless-static-routesz/var/lib/dhcpcd/z.lease�rv)rr r)r}r~r|r�rr�r:�popr
�load_binary_filerrr�r�)
rr&r�r�r��name_map�source�destination�dhcp_messager�rrr�parse_dhcpcd_leasesH�������	��
�zDhcpcd.parse_dhcpcd_leasec
CsXz|�t�|jdd|g�j|�WStjy+}zt�d|j|j|j�t	|�d}~ww)z�Return a dict of dhcp options.

        @param interface: which interface to dump the lease from
        @raises: InvalidDHCPLeaseFileError on empty or unparsable leasefile
            content.
        z--dumpleaserrN)
r$rrGr�r�rr r�r�r)rIr&r�rrrr`Ts,������zDhcpcd.get_newest_leaseracCsD|��}|rdd�t|ddd�|ddd��D�St�d|�gS)a�
        classless static routes as returned from dhcpcd --dumplease and return
        a list containing tuple of strings.

        The tuple is composed of the network_address (including net length) and
        gateway for a parsed static route.

        @param routes: string containing classless static routes
        @returns: list of tuple(str, str) for all valid parsed routes until the
                  first parsing error.

        e.g.:

        sr=parse_static_routes(
            "0.0.0.0/0 10.0.0.1 168.63.129.16/32 10.0.0.1"
        )
        sr=[
            ("0.0.0.0/0", "10.0.0.1"),
            ("169.63.129.16/32", "10.0.0.1"),
        ]
        cS�g|]}|�qSrr�r��irrrr���z.Dhcpcd.parse_static_routes.<locals>.<listcomp>Nr�rLz'Malformed classless static routes: [%s])r|�ziprr��rar�rrrrbqs
(zDhcpcd.parse_static_routesrc)rrrrFrdrfr	rrrr"rirr�rr$r`rr
rbrrrrrds2���

�w���+H$rc	s�eZdZdZ�fdd�Z		ddedeedeee	ffdd	�Z
dedeee	ffd
d�Zedede
eeeffd
d��Z�ZS)�Udhcpc�udhcpccst���d|_dSrDrlrHrorrrJ�rqzUdhcpc.__init__Nr&r%rc
CsFt�d|�tjdd�}tj�||d�|_tt	��t�
|j�Wd�n1s+wY|j�|�tj�|d�}t
�|td�|jdd	d
|d|dd
ddg}t|�rj|�dd�t|�dd��dd��g�ztj|d|jidd�\}}Wntjy�}	zt�d|	j|	j|	j�t|	�d}	~	ww|dur�|||�|�|�S)arRun udhcpc on the interface without scripts or filesystem artifacts.

        @param interface: Name of the network interface on which to run udhcpc.
        @param dhcp_log_func: A callable accepting the udhcpc output and
            error streams.
        @return: A list of dicts of representing the dhcp leases parsed from
            the udhcpc lease file.
        r�Tr�z.lease.jsonN�
udhcpc_scripti�z-O�staticroutesz-iz-sz-nz-qz-fz-vz-xz	0x3d:20{}r�r�rB�
LEASE_FILE)�
update_env�capturez1udhcpc exited with code: %s stderr: %r stdout: %r)rr rr�r/r0r4rnrr�rRr�r�r
r��
UDHCPC_SCRIPTrGr�extend�formatrr~rr�r�r�r�rr`)
rIr&r%r#r�r-�cmdr�r�r�rrrr"�s\
���������	

zUdhcpc.dhcp_discoverycCst�t�|j��S)a�Get the most recent lease from the ephemeral phase as a dict.

        Return a dict of dhcp options. The dict contains key value
        pairs from the most recent lease.

        @param interface: an interface name - not used in this class, but
            required for function signature compatibility with other classes
            that require a distro object
        @raises: InvalidDHCPLeaseFileError on empty or unparsable leasefile
            content.
        )r
�	load_jsonr3rnr_rrrr`�szUdhcpc.get_newest_leaseracCs8|��}|rdd�t|ddd�|ddd��D�SgS)NcSr%rrr&rrrr��r(z.Udhcpc.parse_static_routes.<locals>.<listcomp>r�rL)r|r)r*rrrrb�s(zUdhcpc.parse_static_routesrc)rrrrFrJrfr	rrrr"r`rirr
rbr�rrrorr+�s���

�H(r+rcrD)5rgrQ�loggingr/rwr�r�r�r��
contextlibr�ior�
subprocessr�typingrrrrr	r
r*�	cloudinitrrr
�
cloudinit.netrr�	getLoggerrrr.r�r�r2�	Exceptionrrrrrfr'r-r8r@�ABCrArjrr+�ALL_DHCP_CLIENTSrrrr�<module>sT 
!�

�


K.f

Spamworldpro Mini