CasperSecurity

Current Path : /lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/cloudinit/net/__pycache__/network_state.cpython-310.pyc

o

쑛h���@s�UddlZddlZddlZddlmZmZmZmZddlm	Z	m
Z
mZddlm
Z
mZmZmZmZmZmZmZmZerAddlmZe�e�ZdZdgd�iZgd�Zd	d
ddd
ddddddddddd�dddddddddd dd!�d"�Zeeeeeffe d#<d$e!d%dfd&d'�Z"d(d)�Z#Gd*d+�d+e$�Z%d,d-�Z&Gd.d/�d/�Z'Gd0d1�d1�Z(d2d3�Z)d@d5d6�Z*d7d8�Z+d9d:�Z,	;	dAd<e!d=e-d%e'fd>d?�Z.dS)B�N)�
TYPE_CHECKING�Any�Dict�Optional)�	lifecycle�safeyaml�util)	�find_interface_name_from_mac�get_interfaces_by_mac�ipv4_mask_to_net_prefix�ipv6_mask_to_net_prefix�
is_ip_network�is_ipv4_network�is_ipv6_address�is_ipv6_network�net_prefix_to_ipv4_mask��Renderer���version�config�
network_state)�	addresses�dhcp4�dhcp4-overrides�dhcp6�dhcp6-overrides�gateway4�gateway6�
interfaces�match�mtu�nameservers�renderer�set-name�	wakeonlan�	accept-ra�optionalz	ad-selectzarp-intervalz
arp-ip-targetzarp-validatez
down-delayzfail-over-mac-policyz	lacp-ratezmii-monitor-intervalz	min-links�mode�gratuitous-arp�primaryzprimary-reselect-policyzup-delayztransmit-hash-policy)zbond-ad-selectzbond-arp-intervalzbond-arp-ip-targetzbond-arp-validatezbond-downdelayzbond-fail-over-maczbond-lacp-ratezbond-miimonzbond-min-linksz	bond-modezbond-num-grat-arpzbond-primaryzbond-primary-reselectzbond-updelayzbond-xmit-hash-policyzageing-time�priorityz
forward-delayz
hello-timezmax-agez	path-costz
port-priority�stp)�
bridge_ageing�bridge_bridgeprio�	bridge_fd�bridge_gcint�bridge_hello�
bridge_maxage�bridge_maxwait�bridge_pathcost�bridge_portprio�
bridge_stp�bridge_waitport)�bond�bridge�NET_CONFIG_TO_V2�dikt�returncCs(d|vsd|vrtjdddd�dSdS)z8Warn about deprecations of v2 properties for all devicesrrz$The use of `gateway4` and `gateway6`z22.4zbFor more info check out: https://docs.cloud-init.io/en/latest/topics/network-config-format-v2.html)�
deprecated�deprecated_version�
extra_messageN)r�	deprecate)r<�rB�=/usr/lib/python3/dist-packages/cloudinit/net/network_state.py�warn_deprecated_all_devicesWs
��rDcCs t|�}|D]}|�|�q|S�N)�set�discard)�expected�actual�missing�keyrBrBrC�	diff_keysbsrLc@seZdZdS)�InvalidCommandN)�__name__�
__module__�__qualname__rBrBrBrCrMisrMcs�fdd�}|S)Ncst�����fdd��}|S)Ncs:�rt�|�}|rtd|�f���||g|�Ri|��S)Nz&Command missing %s of required keys %s)rLrM)�self�command�args�kwargs�missing_keys)�func�
required_keysrBrC�	decoratoros
��z7ensure_command_keys.<locals>.wrapper.<locals>.decorator)�	functools�wraps)rVrX�rW)rVrC�wrapperns
z$ensure_command_keys.<locals>.wrapperrB)rWr\rBr[rC�ensure_command_keysmsr]c@s�eZdZefdedefdd�Zedefdd��Zedd	��Z	ed
d��Z
edd
��Zedd��Zddd�Z
ddd�Zdd�Zdd�Zededdfdd��ZdS)�NetworkStaterrcCs*t�|�|_||_|�dd�|_d|_dS)N�use_ipv6F)�copy�deepcopy�_network_state�_version�getr_�_has_default_route)rQrrrBrBrC�__init__�s
zNetworkState.__init__r=cCs
|jdS)Nr)rb�rQrBrBrCr��
zNetworkState.configcCs|jSrE)rcrgrBrBrCr�szNetworkState.versioncC�(z|jddWStygYSw)N�dnsr#�rb�KeyErrorrgrBrBrC�dns_nameservers��
�zNetworkState.dns_nameserverscCri)Nrj�searchrkrgrBrBrC�dns_searchdomains�rnzNetworkState.dns_searchdomainscCs|jdur
|��|_|jSrE)re�_maybe_has_default_routergrBrBrC�has_default_route�s

zNetworkState.has_default_routeNccs@�|j�di�}|��D]}|dur|Vq||�r|VqdS)Nr )rbrd�values)rQ�filter_func�ifaces�ifacerBrBrC�iter_interfaces�s���zNetworkState.iter_interfacesccs8�|j�dg�D]}|dur||�r|Vq|VqdS�N�routes�rbrd)rQrt�routerBrBrC�iter_routes�s���zNetworkState.iter_routescCsh|��D]
}|�|�rdSq|��D]}|�dg�D]}|�dg�D]}|�|�r/dSq#qqdS)NT�subnetsryF)r|�_is_default_routerwrd)rQr{rv�subnetrBrBrCrq�s
�

���z%NetworkState._maybe_has_default_routecCs d}|�d�dko|�d�|vS)N)z::z0.0.0.0�prefixr�network)rd)rQr{�default_netsrBrBrCr~�s�zNetworkState._is_default_routecCs,i}d|vr|d|d<|d|ifi|��S)z�Instantiates a `NetworkState` without interpreting its data.

        That means only `config` and `version` are copied.

        :param network_state: Network state data.
        :return: Instance of `NetworkState`.
        rrrB)�clsrrTrBrBrC�to_passthrough�s	zNetworkState.to_passthroughrE)rNrOrP�NETWORK_STATE_VERSION�dict�intrf�propertyrrrmrprrrwr|rqr~�classmethodr�rBrBrBrCr^s.��
�





	r^c@s�eZdZigggd�ddd�Zeddf	dHdd�Zed	efd
d��Zedd
��Z	e	j
dd
��Z	dd�Zdd�Zdd�Z
dd�ZdIdd�ZdIdd�ZdIdd�Zedg�dd ��Zedg�d!d"��Zegd#��d$d%��Zegd&��d'd(��Zedd)g�d*d+��Zedg�d,d-��Zd.d/�Zed0g�d1d2��Zed0g�d3d4��Zed5g�d6d7��Zd8d9�Zd:d;�Zd<d=�Zd>d?�Z d@dA�Z!dJdBdC�Z"dKdDdE�Z#dFdG�Z$dS)L�NetworkStateInterpreter�r#roFN)r ryrjr_rr$�Optional[Renderer]cCsv||_||_t�|j�|_||jd<d|_i|_||_|j	|j
|j|j|j
|j|j|j|j|j|j|j|jd�
|_dS)NrF)
r9�bondsr:�bridges�	ethernets�
infiniband�loopback�
nameserver�physicalr{�vlan�vlans�wifis)rc�_configr`ra�initial_network_staterb�_parsed�_interface_dns_map�	_renderer�handle_bond�handle_bonds�
handle_bridge�handle_bridges�handle_ethernets�handle_infiniband�handle_loopback�handle_nameserver�handle_physical�handle_route�handle_vlan�handle_vlans�handle_wifis�command_handlers)rQrrr$rBrBrCrf�s*
�z NetworkStateInterpreter.__init__r=cCsHddlm}|jdkrt|j|�rt�d�t�|j	�St|j
|jd�S)Nrr�zPassthrough netplan v2 config�r)�cloudinit.net.netplanrrc�
isinstancer��LOG�debugr^r�r�rb)rQ�NetplanRendererrBrBrCr�s

z%NetworkStateInterpreter.network_statecCs|j�d�S�Nr_rzrgrBrBrCr_sz NetworkStateInterpreter.use_ipv6cCs|j�d|i�dSr�)rb�update)rQ�valrBrBrCr_scCs|j|j|jd�}t�|�S)Nr)rcr�rbr�dumps)rQ�staterBrBrC�dumps
�
zNetworkStateInterpreter.dumpcCsvd|vr
t�d�td��t|d}t||�}|r'd|}t�|�t|��dd�|D�D]
}t||||�q.dS)Nrz$Invalid state, missing version fieldzInvalid state, missing keys: %scSsg|]}|dvr|�qS)r�rB)�.0�krBrBrC�
<listcomp>$sz0NetworkStateInterpreter.load.<locals>.<listcomp>)r��error�
ValueError�NETWORK_STATE_REQUIRED_KEYSrL�setattr)rQr�rWrU�msgrKrBrBrC�loads


�zNetworkStateInterpreter.loadcCst�|j�SrE)rr�rbrgrBrBrC�dump_network_state'sz*NetworkStateInterpreter.dump_network_statecCs|j|jd�S)N)rr)rcr�rgrBrBrC�as_dict*szNetworkStateInterpreter.as_dictTcCsD|jdkr|j|d�d|_dS|jdkr |j|d�d|_dSdS)Nr��skip_brokenTr�)rc�parse_config_v1r��parse_config_v2)rQr�rBrBrC�parse_config-s



�z$NetworkStateInterpreter.parse_configcCs�|jD]B}|d}z|j|}Wnty#}ztd|�|�d}~wwz||�WqtyE|s4�tjd|dd�t�|���Yqw|j	�
�D]1\}}d}z	|jd|}Wntyn}ztd�
|��|�d}~ww|r||\}	}
|	|
d�|d	<qKdS)
N�typez"No handler found for  command '%s'�Skipping invalid command: %sT��exc_infor zINameserver specified for interface {0}, but interface {0} does not exist!r�rj)r�r�rl�RuntimeErrorrMr��warningr�r�r��itemsrbr��format)rQr�rR�command_type�handler�e�	interfacerjrvr#rorBrBrCr�5sT
����������
���z'NetworkStateInterpreter.parse_config_v1cCs�ddlm}t|j|�rdS|j��D]J\}}|dvrqz|j|}Wnty6}ztd|�|�d}~wwz||�|�	|�Wqt
y]|sL�tjd|dd�t�
|���YqwdS)Nrr)rr$z!No handler found for command '%s'r�Tr�)r�rr�r�r�r�r�rlr��
_v2_commonrMr�r�r�r�)rQr�r�r�rRr�r�rBrBrCr�Xs8�������z'NetworkStateInterpreter.parse_config_v2�namecCs
|�|�SrE�r��rQrRrBrBrCr�trhz'NetworkStateInterpreter.handle_loopbackcCsd|j�di�}|�|di�}|�di���D]\}}|�||i�qt|�d��}|jsF|D]}|�d��d�s@t|�d��rEd|_nq/|�d	d
�}|d
urUt�	|�}|�dd
�}	|	d
urdt�	|	�}	|�dd
�}
|
d
urst�	|
�}
|�|�d
�|�d�|�d�|�d�dd|�d�d
d
|||	|
|�d�d��|�d
|�d��}|jd�||i�|�
�d
S)z�
        command = {
            'type': 'physical',
            'mac_address': 'c0:d6:9f:2c:e8:80',
            'name': 'eth0',
            'subnets': [
                {'type': 'dhcp4'}
             ],
            'accept-ra': 'true'
        }
        r r��paramsr}r��6�addressTr'Nr&r(�	config_id�mac_address�inet�manualr"�keep_configuration)r�r�r�r�r�r)r"r��gatewayr}r'r&r(r�)rbrdr�r��_normalize_subnetsr_�endswithrr�is_truer�)rQrRr rv�paramr�r}r�	accept_rar&r(�	iface_keyrBrBrCr�xsT��


��z'NetworkStateInterpreter.handle_physical)r��vlan_id�	vlan_linkcCs\|j�di�}|�|�|�|�d�i�}|�d�|d<|�d�|d<|�|d|i�dS)z�
        auto eth0.222
        iface eth0.222 inet static
                address 10.10.10.1
                netmask 255.255.255.0
                hwaddress ether BC:76:4E:06:96:B3
                vlan-raw-device eth0
        r r�r�zvlan-raw-devicer�N)rbrdr�r�)rQrRr rvrBrBrCr��s

z#NetworkStateInterpreter.handle_vlan)r��bond_interfacesr�c	Cs|�|�|j�d�}|�|�d�i�}|�d���D]\}}|�||i�q|�ddi�|jd�|d|i�|�d�D]@}||vrO|dd�}|�|�|j�di�}|�|�}|�d�|d	<|�d���D]\}}|�||i�qi|jd�||i�q?d
S)aU
        #/etc/network/interfaces
        auto eth0
        iface eth0 inet manual
            bond-master bond0
            bond-mode 802.3ad

        auto eth1
        iface eth1 inet manual
            bond-master bond0
            bond-mode 802.3ad

        auto bond0
        iface bond0 inet static
             address 192.168.0.10
             gateway 192.168.0.1
             netmask 255.255.255.0
             bond-slaves none
             bond-mode 802.3ad
             bond-miimon 100
             bond-downdelay 200
             bond-updelay 200
             bond-lacp-rate 4
        r r�r�zbond-slaves�noner�r9)r�r�zbond-masterN)r�rbrdr�r�)	rQrRr rvr�r��ifname�cmd�bond_ifrBrBrCr��s(
�

�z#NetworkStateInterpreter.handle_bond�bridge_interfacesc	Cs|j�di�}|�d�D]}||vrqd|i}|�|�q|j�di�}|�|�|�|�d�i�}|d|d<|�di���D]\}}|�||i�q@|�d�}|durwt|t�sw|dvrad	}n|d
vrhd}ntdj|d
���|�d|i�|�|d|i�dS)a�
            auto br0
            iface br0 inet static
                    address 10.10.10.1
                    netmask 255.255.255.0
                    bridge_ports eth0 eth1
                    bridge_stp off
                    bridge_fd 0
                    bridge_maxwait 0

        bridge_params = [
            "bridge_ports",
            "bridge_ageing",
            "bridge_bridgeprio",
            "bridge_fd",
            "bridge_gcint",
            "bridge_hello",
            "bridge_hw",
            "bridge_maxage",
            "bridge_maxwait",
            "bridge_pathcost",
            "bridge_portprio",
            "bridge_stp",
            "bridge_waitport",
        ]
        r r�r��bridge_portsr�r7N)�on�1rT)�off�0rFz2Cannot convert bridge_stp value ({stp}) to boolean)r-)	rbrdr�r�r�r��boolr�r�)	rQrRr r�r�rvr�r�r7rBrBrCr��s4�

��z%NetworkStateInterpreter.handle_bridgecCs|�|�dSrEr�r�rBrBrCr�=sz)NetworkStateInterpreter.handle_infinibandcCsxg}g}d|vr|d}t|t�s|g}|D]}|�|�qd|vr8|d}t|t�s.|g}|D]}|�|�q0||fS)Nr�ro)r��list�append)rQrRr#ro�addrs�addr�paths�pathrBrBrC�
_parse_dnsAs

z"NetworkStateInterpreter._parse_dnsr�cCsX|j�d�}|�|�\}}d|vr||f|j|d<dS|d�|�|d�|�dS)Nrjr�r#ro)rbrdr�r��extend)rQrRrjr#rorBrBrCr�Rs�z)NetworkStateInterpreter.handle_nameservercCs0|j�d�}|�|�\}}||d�||d<dS)Nr r�rj)rbrdr�)rQrRrv�_ifacer#rorBrBrC�_handle_individual_nameserver_sz5NetworkStateInterpreter._handle_individual_nameserver�destinationcCs|jd�t|��dSrx)rbr��_normalize_router�rBrBrCr�esz$NetworkStateInterpreter.handle_routecC�|j|dd�dS)a�
        v2_command = {
          bond0: {
            'interfaces': ['interface0', 'interface1'],
            'parameters': {
               'mii-monitor-interval': 100,
               'mode': '802.3ad',
               'xmit_hash_policy': 'layer3+4'}},
          bond1: {
            'bond-slaves': ['interface2', 'interface7'],
            'parameters': {
                'mode': 1,
            }
          }
        }

        v1_command = {
            'type': 'bond'
            'name': 'bond0',
            'bond_interfaces': [interface0, interface1],
            'params': {
                'bond-mode': '802.3ad',
                'bond_miimon: 100,
                'bond_xmit_hash_policy': 'layer3+4',
            }
        }

        r9��cmd_typeN��_handle_bond_bridger�rBrBrCr�jsz$NetworkStateInterpreter.handle_bondscCr)a�
        v2_command = {
          br0: {
            'interfaces': ['interface0', 'interface1'],
            'forward-delay': 0,
            'stp': False,
            'maxwait': 0,
          }
        }

        v1_command = {
            'type': 'bridge'
            'name': 'br0',
            'bridge_interfaces': [interface0, interface1],
            'params': {
                'bridge_stp': 'off',
                'bridge_fd: 0,
                'bridge_maxwait': 0
            }
        }

        r:rNrr�rBrBrCr��sz&NetworkStateInterpreter.handle_bridgescCst�}|��D]�\}}|dd�}|�di�}|�dd�}|s't�d|t|��||d<|}|�d�}	|	r7|	}n|rG|rG|��}
t|
�}|rG|}||d	<|�d
d�}|rYd
|i|d<dD]}
|
|vrg||
||
<q[t|�|�	|�}t
|�d
kr~|�d|i�t�d|�|�|�qdS)a�
        ethernets:
          eno1:
            match:
              macaddress: 00:11:22:33:44:55
              driver: hv_netvsc
            wakeonlan: true
            dhcp4: true
            dhcp6: false
            addresses:
              - 192.168.14.2/24
              - 2001:1::1/64
            gateway4: 192.168.14.1
            gateway6: 2001:1::2
            nameservers:
              search: [foo.local, bar.local]
              addresses: [8.8.8.8, 8.8.4.4]
          lom:
            match:
              driver: ixgbe
            set-name: lom1
            dhcp6: true
            accept-ra: true
          switchports:
            match:
              name: enp2*
            mtu: 1280

        command = {
            'type': 'physical',
            'mac_address': 'c0:d6:9f:2c:e8:80',
            'name': 'eth0',
            'subnets': [
                {'type': 'dhcp4'}
             ]
        }
        r�)r�r�r!�
macaddressNzHNetworkState Version2: missing "macaddress" info in config entry: %s: %sr�r%r��driverr�)r"r!r&r'r(rr}z!v2(ethernets) -> v1(physical):
%s)
r
r�rdr�r��str�lowerr	rD�_v2_to_v1_ipcfg�lenr�r�)rQrR�
ifaces_by_mac�eth�cfg�phy_cmdr!r�r��set_name�lcase_mac_address�macrrKr}rBrBrCr��sL-��
�
�z(NetworkStateInterpreter.handle_ethernetscCs�|��D]<\}}d||�d�|�d�d�}d|vr|d|d<t|�|�|�}t|�dkr5|�d|i�t�d|�|�|�qd	S)
aq
        v2_vlans = {
            'eth0.123': {
                'id': 123,
                'link': 'eth0',
                'dhcp4': True,
            }
        }

        v1_command = {
            'type': 'vlan',
            'name': 'eth0.123',
            'vlan_link': 'eth0',
            'vlan_id': 123,
            'subnets': [{'type': 'dhcp4'}],
        }
        r��id�link)r�r�r�r�r"rr}zv2(vlans) -> v1(vlan):
%sN)	r�rdrDr	r
r�r�r�r�)rQrRr�r
�vlan_cmdr}rBrBrCr�s�
�z$NetworkStateInterpreter.handle_vlanscCst�d�dS)NzOWifi configuration is only available to distros with netplan rendering support.)r�r�r�rBrBrCr�#s�z$NetworkStateInterpreter.handle_wifiscCsvt�d|�|��D].\}}d|vr8|�d��d�}|�d��d�}ddi}|r,||d<|r2||d<|�||�q
dS)Nzv2_common: handling config:
%sr#rorr�r�r�)r�r�r�rdr�)rQr
rv�dev_cfgrorj�name_cmdrBrBrCr�)s��z"NetworkStateInterpreter._v2_commonc
s&tdd�t�|���D���|��D]~\}}tdd�|��D��}|�di�}|�dd�}|r3||d<d|d	||d
|�d�dt�fd
d�|��D��i}d|vrW|d|d<t|�|�|�}	t|	�dkrm|�d|	i�t	�
d|||�|dkr|�|�q|dkr�|�|�qt
dj|d���dS)z(Common handler for bond and bridge typescss�|]	\}}||fVqdSrErB�r�r��vrBrBrC�	<genexpr>;s�
�z>NetworkStateInterpreter._handle_bond_bridge.<locals>.<genexpr>css$�|]
\}}|tvr||fVqdSrE)�NETWORK_V2_KEY_FILTER)r�rK�valuerBrBrCr@s����
parameterszgratuitious-arpNr*r�r��_interfacesr r�c3s �|]\}}�||fVqdSrErBr��v2key_to_v1rBrCrP��r"rr}zv2(%s) -> v1(%s):
%sr:r9z Unknown command type: {cmd_type}r)r�r;rdr��poprDr	r
r�r�r�r�r�r�r�)
rQrRr�	item_name�item_cfg�item_paramsr��
grat_value�v1_cmdr}rBrrCr7sB���
���z+NetworkStateInterpreter._handle_bond_bridgec

Cs�dd�}g}|�d�rddi}||�di�|�|�|�|�d�r7ddi}d|_||�di�|�|�|�d	}d	}i}|�d
g�D]`}d|d�}d
|vrcd|vrb|d	urb|�d�}|�d|i�nd|vrw|d	urw|�d�}|�d|i�d|vr�|s�|�d��d
�}	|	r�|	|d<|�d��d�}
|
r�|
|d<|�|�|�|�qCg}|�dg�D]}|�t|�d�|�d�|�d�|�d�d���q�t|�r�t|�r�||dd<|S)z7Common ipconfig extraction from v2 to v1 subnets array.cSsd|vr|d|d<dSdS)Nzroute-metric�metricrB)�	overridesrrBrBrC�_add_dhcp_overridesis�zDNetworkStateInterpreter._v2_to_v1_ipcfg.<locals>._add_dhcp_overridesrr�rrTrNr�static)r�r��:rr�rr#rmro�
dns_searchry�to�viar'r")r�r�r'r"r)rdr�r_r�r�r
)
rQr
r)r}rrrr#r�rroryr{rBrBrCr	fsb



�
�

���
z'NetworkStateInterpreter._v2_to_v1_ipcfg)r$r�)T)r=NrE)%rNrOrPr�r�rfr�r^rr_�setterr�r�r�r�r�r�r�r]r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr	rBrBrBrCr��sn��
�
�




#


=



4
@



_"

/r�cCszt�|�}tdd�|��D��}|�d�dvr |�t|dd��dd�|�d	g�D�|d	<d
d�}dD]}|||�q3|S)
Ncss �|]\}}|r||fVqdSrErBrrBrBrCr�r z$_normalize_subnet.<locals>.<genexpr>r�)r*�static6)r��
ip_address��address_keyscS�g|]}t|��qSrB)r�)r��rrBrBrCr��s�z%_normalize_subnet.<locals>.<listcomp>rycSs2||vrt||t�s||��||<dSdSdSrE)r�r��split)�snetr�rBrBrC�listify�s�z"_normalize_subnet.<locals>.listify)r,rm)r`rar�r�rdr��_normalize_net_keys)r�
normal_subnetr8r�rBrBrC�_normalize_subnet�s 
��	

�r;rBcCs�dd�|��D�}d}|D]}|�|�r|}nq
|s-dd�|�|f}t�|�t|��t|�|��}t|�sFt�d|�td|�d���t|�}t	|�}|�d	�}	d
|vr|�
d
�\}
}}|
||<|rjt|�}
n8|rqt|�}
n1t�d|�td|�d���d|vr�t
|d�}
n|	r�|r�t|	�}
n|	r�|r�t|	�}
n|r�dnd
}
d|vr�t|d�t|
�kr�t�d|
|�|
|d<|r�d	|vr�|d	=|S|r�t|d�|d	<|S)a�Normalize dictionary network keys returning prefix and address keys.

    @param network: A dict of network-related definition containing prefix,
        netmask and address_keys.
    @param address_keys: A tuple of keys to search for representing the address
        or cidr. The first address_key discovered will be used for
        normalization.

    @returns: A dict containing normalized prefix and matching addr_key.
    cSs"i|]
\}}|s|dkr||�qS)rrBrrBrBrC�
<dictcomp>�s"z'_normalize_net_keys.<locals>.<dictcomp>Nz/No config network address keys [%s] found in %s�,z$Address %s is not a valid ip networkzAddress z is not a valid ip address�netmask�/r��@�z;Overwriting existing 'prefix' with '%s' in network info: %s)r�rd�joinr�r�r�rr
rr�	partitionrrr�r�r)r�r3�net�addr_keyrK�messager��ipv6�ipv4r>�	addr_part�_�maybe_prefixr�rBrBrCr9�sf
��





��r9c
Cs�tdd�|��D��}d|vr|d|d<|d=|�t|dd��|�d�}|rFz	t|�|d<W|StyE}ztd�|��|�d	}~ww|S)
a�normalize a route.
    return a dictionary with only:
       'type': 'route' (only present if it was present in input)
       'network': the network portion of the route as a string.
       'prefix': the network prefix for address as an integer.
       'metric': integer metric (only if present in input).
       'netmask': netmask (string) equivalent to prefix iff network is ipv4.
    css$�|]
\}}|dvr||fVqdS))�NNrBrrBrBrCrs��z#_normalize_route.<locals>.<genexpr>r�r�)r�r�r2r'z(Route config metric {} is not an integerN)	r�r�r�r9rdr�r��	TypeErrorr�)r{�normal_router'r�rBrBrCr�s2
���
�����r�cCs|sg}dd�|D�S)NcSr4rB)r;)r��srBrBrCr�8sz&_normalize_subnets.<locals>.<listcomp>rB)r}rBrBrCr�5sr�T�
net_configr�cCsfd}|�d�}|�d�}|dkr|}|r(|dur(t|||d�}|j|d�|j}|s1td|����|S)zfParses the config, returns NetworkState object

    :param net_config: curtin network config dict
    Nrrr�)rrr$r�zpNo valid network_state object created from network config. Did you specify the correct version? Network config:
)rdr�r�rr�)rPr�r$r�rr�nsirBrBrC�parse_net_config_data;s$	

���rR)rB)TN)/r`rY�logging�typingrrrr�	cloudinitrrr�
cloudinit.netr	r
rrr
rrrr�cloudinit.net.rendererr�	getLoggerrNr�r�r�rr;r�__annotations__r�rDrL�	ExceptionrMr]r^r�r;r9r�r�r�rRrBrBrBrC�<module>s�
,
����"VZ
L"����
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY