HEX
Server: LiteSpeed
System: Linux srv146.niagahoster.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: kodi1989 (1633)
PHP: 8.1.34
Disabled: symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/pyroute2/ipdb/__pycache__/interfaces.cpython-37.pyc
B

��f���@s�ddlZddlZddlZddlmZmZddlmZddlmZm	Z	ddl
mZddlm
Z
mZmZmZddlmZddlmZmZmZdd	lmZdd
lmZmZmZddlmZddlm Z dd
l!m"Z"m#Z#da$ej%ej&Bej'Bej(BZ)dd�Z*dd�Z+Gdd�de�Z,Gdd�de
�Z-Gdd�de.�Z/Gdd�de.�Z0de-id�deddd�d �d�d!edd"d�d �d�d#e/id�d$e0id�gZ1dS)%�N)�AF_INET�AF_INET6)�error)�	inet_ntop�	inet_pton)�config)�Dotkeys�View�
basestring�dqn2int)�	AF_BRIDGE)�CommitException�CreateException�PartialCommitException)�	LinkedSet)�SYNC_TIMEOUT�
Transactional�with_transaction)�rtnl)�NetlinkError)�IFF_MASK�ifinfmsg)
�bridgeZbondZtuntap�vxlanZgreZgretapZip6greZ	ip6gretapZmacvlanZmacvtapZipvlanZvrfZvticsjg}x`tD]X}tjj�|���dk	r
t�dd�dk	rN|�fdd��jD�7}q
|dd��jD�7}q
W|S)N�prefixcsg|]}��|d��qS)r)�nla2name)�.0�i)�msg��I/opt/alt/python37/lib/python3.7/site-packages/pyroute2/ipdb/interfaces.py�
<listcomp>:sz$_get_data_fields.<locals>.<listcomp>cSsg|]}t�|d��qS)r)rr)rrrrr r!<s)�supported_kindsr�ifinfoZdata_map�get�getattr�nla_map)�ret�datar)rr �_get_data_fields2s
r)cCst||�dkS)N�)�abs)�x�yrrr �_br_time_check@sr.cs�eZdZdZdd�eeeeeeeeed�
Zddddd	d
ddgZd
d�ejD�Z	x.dD]&Z
eeje
�Z
e	�dd�e
jD��qTWe	�d�e	�d�e	�d�e	�d�e	�d�e	�d�e	�d�e	�d�e	�d�e	�e��e	�e�dPdd�Zdd�Zedd ��Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�ZedQd/d0��ZedRd1d2��ZedSd3d4��Zed5d6��Z ed7d8��Z!ed9d:��Z"d;d<�Z#�fd=d>�Z$d?d@�Z%dAdB�Z&dTdFdG�Z'dHdI�Z(dJdK�Z)dLdM�Z*dNdO�Z+�Z,S)U�	Interfacea�
    Objects of this class represent network interface and
    all related objects:
    * addresses
    * (todo) neighbours
    * (todo) routes

    Interfaces provide transactional model and can act as
    context managers. Any attribute change implicitly
    starts a transaction. The transaction can be managed
    with three methods:
    * review() -- review changes
    * rollback() -- drop all the changes
    * commit() -- try to apply changes

    If anything will go wrong during transaction commit,
    it will be rolled back authomatically and an
    exception will be raised. Failed transaction review
    will be attached to the exception.
    cCs||@t@|t@kS)N)r)r,r-rrr �<lambda>[�zInterface.<lambda>)
�flagsZ
br_hello_timeZ
br_max_ageZbr_ageing_timeZbr_forward_delayZbr_mcast_membership_intvlZbr_mcast_querier_intvlZbr_mcast_query_intvlZbr_mcast_query_response_intvlZbr_mcast_startup_query_intvl�
ipdb_scope�
ipdb_priority�vlans�ipaddr�ports�
vlan_flags�	net_ns_fd�
net_ns_pidcCsg|]}t�|d��qS)r)rr)rrrrr r!pszInterface.<listcomp>)Zbridge_slave_datacCsg|]}t�|d��qS)r)rr)rrrrr r!ss�indexr2�mask�change�kind�peer�vlan_id�
vlan_protocol�	bond_modeNc	Cs�t�|||�d|_d|_d|_d|_g|_d|_d|_d|_	d|_
|j�d�|j�d�|j�d�d|_
t�|_t�|_|j�DxdD]
}||=q�W|j��|d<t�|d<t�|d<d|d	<WdQRXdS)
zc
        Parameters:
        * ipdb -- ipdb() reference
        * mode -- transaction mode
        )�header�linkinfo�protinfoZaf_spec�attrs�event�map�statsZstats64r=Z__alignNFr6r7r5)r=r<rr4)r�__init__�cleanupZingressZegress�nlmsg�errors�partial�
_exception�_deferred_linkZ_tbZ_linked_sets�add�_freeze�set�_delay_add_port�_delay_del_port�
_direct_state�ipdb�_ipaddr_setr)�selfrW�mode�parent�uidrrrr rJ�s.



zInterface.__init__cCs|dS)Nr;r)rYrrr �__hash__�szInterface.__hash__cCs|�dd�S)zI
        [property] Link to the parent interface -- if it exists
        �masterN)r$)rYrrr �	if_master�szInterface.if_mastercCs |jj�|d|d|j�|S)N�ifnamer;)rW�
interfaces�_detachrL)rYrrr �detach�szInterface.detachcs:�jdk	rtd��������fdd�}�j�|��_�S)Nzthe interface is frozen alreadycsB|�dd��dkr>y�j�ddd�Wntk
r<YnXdS)Nr;����)�transaction�commit_phase�commit_mask)r$�commit�	Exception)rWr�action)�dumprYrr �cb�szInterface.freeze.<locals>.cb)rR�RuntimeError�pickrWZregister_callback)rYrmr)rlrYr �freeze�s
zInterface.freezecCs|j�|j�d|_|S)N)rWZunregister_callbackrR)rYrrr �unfreeze�szInterface.unfreezecCs�x|D�]}||dkrq|dkrnx|dD]}|j|�q.Wx�||D]}t|t�r^|f}|j|�qJWq|dkr�x|dD]}|�|�q�Wx~||D]}|�|�q�Wq|dkr�x|dD]}|�|�q�Wx<||D]}|dkr�|�|�q�Wq|dk�rq||||<qW|S)a�
        Load the data from a dictionary to an existing
        transaction. Requires `commit()` call, or must be
        called from within a `with` statement.

        Sample::

            data = json.loads(...)
            with ipdb.interfaces['dummy1'] as i:
                i.load(data)

        Sample, mode `explicit::

            data = json.loads(...)
            i = ipdb.interfaces['dummy1']
            i.begin()
            i.load(data)
            i.commit()
        Nr6r7r5�)�
neighbours�family)�del_ip�
isinstancer
�add_ip�del_port�add_port�del_vlan�add_vlan)rYr(�key�addr�port�vlanrrr �load�s2

zInterface.loadc	Cs |j�|�|�WdQRXdS)z�
        Update the interface info from a dictionary.

        This call always bypasses open transactions, loading
        changes directly into the interface data.
        N)rVr�)rYr(rrr �	load_dictszInterface.load_dictc	Cs�|j���|ddkrdS|ddkrV|dddkr:dStjddkrV|�d	�sVdSx|��D]\}}|||<q`Wx4|d
D](}t�|d�}||jkr~|d||<q~W|�d�}|dk	�rn|�d
�}|dk	�rn||d<|dk�r"|�d�}|�d�|d<|�d�|d<|�di��dd�|d<|t	k�rn|�d��p:i}x0|�d
g�D] }	t�|	d�}|	d||<�qJW|dt
k�rR|�d	�}
|
dk	�r|
�d�}i}x|D]}
|
||
d<�q�Wt|�
��}x |d|D]}|�|��q�Wx$||dD]}|�||��q�W|�d�}|dk	�rRx.|d
D]"\}}|dd���}|||<�q,W|jdk	�r�|jj|d|d<|jj|d|d <x |jD]}||k�r�||=�q�W|�d!d�|dk�r�d|d!<d"|d<WdQRXdS)#z�
        Update the interface info from RTM_NEWLINK message.

        This call always bypasses open transactions, loading
        changes directly into the interface data.
        r3�lockedN)�shadow�createrCZsequence_numberr�ZIFLA_AF_SPECrFrrZ
IFLA_LINKINFOZIFLA_INFO_KINDr>rZIFLA_INFO_DATAZIFLA_VLAN_IDr@ZIFLA_VLAN_PROTOCOLrAZIFLA_VLAN_FLAGSr2r8rtZIFLA_BRIDGE_VLAN_INFO�vidr5Z
IFLA_PROTINFOr*r;r6rsr^�system)rVr�kernel�get_attr�itemsrrrKr$r"r�	get_attrsrS�keysrzr{�lowerrWr6rs)rY�dev�name�value�cellZnormrDr>r(Znla�specr5ZvmaprZvidsr�rE�attr�itemrrr �load_netlinksv	

	















zInterface.load_netlinkcOs|dj||�S)Nr6)�wait_ip)rY�argv�kwargrrr r�lszInterface.wait_ipcCs�d}|dkr|�d�\}}|�d�dkr>t}tttt|��}nt}t|t�rryt|d�}Wnt	||�}YnX|d�
||f�i}|dk	r�||d<|dk	r�||d<|dk	r�||d	<|dj||f|d
�dS)a�
        Add IP address to an interface

        Address formats:

            with ipdb.interfaces.eth0 as i:
                i.add_ip('192.168.0.1', 24)
                i.add_ip('192.168.0.2/24')
                i.add_ip('192.168.0.3/255.255.255.0')
                i.add_ip('192.168.0.4/24',
                         broadcast='192.168.0.255',
                         scope=254)
        rN�/�:rdr6�	broadcast�anycast�scope)�raw)�split�findrrrrrvr
�intr�unlinkrQ)rY�ipr<r�r�r�rt�requestrrr rwos*
zInterface.add_ipcCs�|dkr8|�d�\}}|�d�dkr.t|�}n
t|d�}|�d�dkrVtttt|��}||f|dkr�|d�||f�|d�||f�dS)z5
        Delete IP address from an interface
        Nr��.rdrr�r6)	r�r�rr�rrrr��remove)rYr�r<rrr ru�s

zInterface.del_ipcCsJt|t�r|d}n|}|dd�}|d�|�|dj|||fd�dS)Nr�r)r�r2r5)r�)rv�dictr�rQ)rYrr2r�rrr r{�s


zInterface.add_vlancCs,||dkr(|d�|�|d�|�dS)Nr5)r�r�)rYrrrr rz�szInterface.del_vlancCs<|�|�}|s|j�|�n|d�|�|d�|�dS)z1
        Add port to a bridge or bonding
        r7N)�
_resolve_portrTrQr�)rYr~�ifindexrrr ry�s

zInterface.add_portcCs<|�|�}|s|j�|�n|d�|�|d�|�dS)z6
        Remove port from a bridge or bonding
        r7N)r�rUrQr�r�)rYr~r�rrr rx�s

zInterface.del_portcCsJd}x@|rD|j�|d�}|r0|�|d�Pq|d8}t�d�qW|S)z.
        Reload interface information
        r�r;rrr)�nl�	get_linksr��time�sleep)rY�	countdown�linksrrr �reload�szInterface.reloadcs�tt|���}|j}|ddkrV|d|d<|d|d<|d|d<|d=|d=|d=|jr�td	d
�|jD��}d|kr�|d|O<n||d<|jr�tdd
�|jD��}d|kr�|d|O<n||d<|S)
Nr3r�r6z+ipaddrr7z+portsr5z+vlanscSsg|]}d|�qS)z*%sr)rr,rrr r!�sz$Interface.review.<locals>.<listcomp>cSsg|]}d|�qS)z*%sr)rr,rrr r!�sz-ports)�superr/�review�
current_txrTrSrU)rYr'�lastr7)�	__class__rr r��s(zInterface.reviewc
OsLy
|||�Stk
rF}z|jr2|j�|�gS|�Wdd}~XYnXdS)N)rjrNrM�append)rY�cmdr�r�rrrr �_run�s
zInterface._runcCs.t|t�r|dS|jj�|i��dd�SdS)Nr;)rvr/rWrar$)rYr~rrr r�s
zInterface._resolve_portrr�Fc-
sV||@s�Sd}d}d}�jj}	d}
d}dddd�}|s<�r@d}
|rP�j|�n
�pX�j��jrfg�_�j����ddk�r"�ddkr��ddkr�����Sd}��dd��y�j	rڈj	\}
}��
|��|
<d�_	�d	d
k�r
�j�d�d	<d�d<WdQRX���}yh�fdd
�t
dd���D��x8dD]0}|�k�r6�j�d�|<�|=WdQRX�q6W�jjd`��WnHtk
�r�}z(|jtjk�r��ddk�r�|}n�Wdd}~XYnXWnZtk
�r }z:�j�r��j�|�t��n|	�r|
�r���j��Wdd}~XYnXWdQRX�ddk�r�|dk�r��d�r��jjd�dd�}�j�d�d<WdQRX�jjd�dd�|�������S|�rX|dk�r���d��s�|	�r�|
�rڈ��j����t|t��r�|�nt��x(�jj�dD]}�d� |��qWy��!�jjda��d�Wntk
�rVYnX���}|dk�r�t"�jd��r�g�_#xR�jj#�
d �di�D]8}t$|d!d"d�d#k�r��j#�|d$|d$��f��q�Wd%d&�}|��j%�j&�|	�o�|
�|��j'�j(�|	�o
|
��
y|�\}}�j)}�j}|d'�s>|d'�r2�d'��d'�x4|d'D](}||j*d(�d�d'|dd)��qZWx�|d'D]v}�d'|d}�d'|d}�d|d)�}|d*k�r�||d+<�j���+|d,�WdQRX||j*df|��q�W�d'j,�t-��d'j,�.��s2t/d-��|d.�sF|d.�rh�d.��d.�x`|d.D]T}|�jj0k�r��jj0|�d/d��1d/d0�||jd1|dd2�n�j�t2|���qbWxh|d.D]\}|�jj0k�r�jj0|�d/�d��1d/d0�||jd1|�dd2�n�j�t2|���q�W�d.j,�t-��d.j,�.��rnx0�jj3�dd�D]}��!|��qXWnt/d3��x�t4|d.�t4|d.�D]�}�jj0|}|j5d/}|�t-�|j�|j5d/=|j5d0=WdQRX|�.��s�t/d4��||d.k�r|j6�dk�r(t/d5��n|j6�dk�r(t/d6���dd7k�r��d8|d8k�r���d8|d8���d8��q�Wi�i�i��d�d<�d�d<d} x�|�7�D]�\}}!|!dk	�r�|�j8k�r�|dk�r�|dd9�d:k�r�||�|<n\|dd;�d<k�r
||�|d;d�<n4|d	k�r2||dk	�r2||�9��|<||�|<�q�Wd�d<d�d<�dd7k�r�t:�fd=d>��D���r��d�d<�d�d<t;�d?<d} ||jd@f��t:�fdAd>��D���	r,�d�d<�d�d<��<d	d�d
k�	r��=d	���=dd�d} ||jd1f��dB�k�	r,��>�t:�fdCd>��D���	r`�d�d<||j?d@f��| �	rv�j�	sv��@�|�<d+�dk	�	r�||jd@fdD�d|d+dE���x�tAd9�D�]n}"�d�d}#�d�d}$|#�	s�|$�	s�P�d��d�tB|$�fdFd�ddG�}%x�|%D]�}y$||jCd�d|d|ddH�Wn�tk
�
rp}z|jtjDk�
r`�Wdd}~XYnNtEk
�
r�}z.t|jFdtG��
r�|jFd�HdI��
r��
w�Wdd}~XYnX�
qWx�|#D]�}y"tIdJd>��d|�7�D��}&Wnt2k
�r
d}&YnXyB|&�pi}&�d|&d<|d|&d	<|d|&dK<||jCdf|&�Wn4tk
�r�}z|jtjk�rr�Wdd}~XYnX�
q�W�dLd@�r�t"�jjdM��r�x&t4�djJ�D]}�d�K|��q�Wx,�jjL�dtMdN�D]}�jj�N|��q�W�dj,�t-��dj,�.��	r�P�	q�Wt/dO��x(�jOD]}'|'��P�|�P���P���q6WdP|k�sldQ|k�
r8i�x$dD]}||k�rv||�|<�qvW�d�d<||jd1f��dR}(x�|(�
r6y�j�Q�d�WnLtk
�
r}z|jtjRk�r�P�Wdd}~XYntk
�
r�YnX|(d8}(tS�TdS��q�W|�<d�dTk�
r��jjd�dd�}�j�d�d<WdQRX�jjd�dd�|���j�dU�d<WdQRX|dk�
rˆj�UdV�|�<d�dk�
r�jj0�Vd�dd�|
�
r����j��S|dk�r�j�UdV�d}	W�n@tk
�r\}�z|}tW�X�|dW<�|dX<d|dY<|dk�r�|�rfd}	y �jY|�rv|n|dZ||d[�Wn2tk
�r�})z|)|dY<tZ�}Wdd})~)XYnXnt�j�Q�}*x|*D]}+�jj0�N|+��q�W�j�3�}*x|*D]}+�jj0�N|+��q�Wx"�j�L�D]}�jj�N|��qWxd\D]}�|�[��q6WWdd}~XYnX�j�rv�j�rvtd]�}|	�r�|
�r����j�|dk	�r�||_\|�|dZk�r@x��j#D]�},|,dj�d^|,dd<WdQRXy|,djY|,ddZdZd_�WnBtZk
�r8}z"t|j]t��r(|j]jtjk�r(Wdd}~XYnX�q�WtS�Tt^j_�g�_�S)bzz
        Commit transaction. In the case of exception all
        changes applied during commit will be reverted.
        NT)�	tracebackrf�
next_stageFr3r�r�r��addressz00:00:00:00:00:00r�cs"i|]}�|dk	r�||�qS)Nr)rr|)rfrr �
<dictcomp>Osz$Interface.commit.<locals>.<dictcomp>cSs0|dd�dko.|dd�dko.|dd�dkS)Nr*Zbond_��brport_r��br_r)r,rrr r0Rsz"Interface.commit.<locals>.<lambda>)r9r:rQr>)rrrrr;�RTM_DELLINKr`)r`r��delete)r;r6r$r�routesZoifr|�tabler��routec
Ss�dd�}xtt|�D]h}|�|�}|sV|jr<|j�||��qz|rL|�|j�||��q|�|�|j�||�WdQRXqWdS)NcSstd|�S)Nzcan not resolve port %s)�KeyError)r,rrr r�sz6Interface.commit.<locals>.resolve_ports.<locals>.error)	�tupler�rNrMr��dropr\r�rV)rfr7�callbackrYr�rr~r�rrr �
resolve_ports�s


z'Interface.commit.<locals>.resolve_portsr5�del)r;Z	vlan_inforYr8r�zvlans target is not setr7r^�link�update)r;r^zports target is not setzmaster target failedzmaster set failedzmaster unset failedrZmtur�r�r�r�csg|]}�|dk	�qS)Nr)rr�)�brequestrr r!esz$Interface.commit.<locals>.<listcomp>rtrScsg|]}�|dk	�qS)Nr)rr�)r�rr r!msZifaliascsg|]}�|dk	�qS)Nr)rr�)�prequestrr r!zsr)r>r;r8cs�d|dS)Nr6r2r)r,)rYrr r0�r1)r|�reverse)r;r��	prefixlenz
illegal IPcSsg|]}|ddkr|�qS)r)r�r�r�r)r�krrr r!�sr�r2Znetns)r;rtzipaddr target is not setr9r:�
g�������?)r�r�r��runr�rfr�re)rfrgrh�newif)r6r7r5zpartial commit error�restore)rfrgrh)rQ)r$)`rWZtxdropZ	global_txr�rNrMZ_write_lockZ
invalidateZ
set_targetrPr�rVro�filterr�r�r�code�errno�EEXISTrjr�rr�r\Zwatchdog�waitr�Zwait_targetrvrr6rQr��hasattrr�r%rTryrUrxr�Zvlan_filterr{�targetr�is_setr
raZ
mirror_targetr��	get_vlans�listZ_local_targetsr_r��_virtual_fieldsr��anyrr$�popr�ZbrportZwait_all_targets�range�sortedr}Z
EADDRNOTAVAIL�socket_error�argsr
�
startswithr�Zipv6r��get_addrr�_newZ
_commit_hooksrlr�ZENODEVr�r�Zensurerbr��
format_excrirnZclear_target�debug�causerZcommit_barrier)-rY�tidrfrgrhr�r�added�removedr�Znotx�initr�Zlink_keyZlink_objr|r,�e�wdr}�snapshot�recordr�r�r�rZvinfor2�reqrr~r�Zwait_allr��_Zip2addZ	ip2removeZripr��chr�Zi_er�r�r�r)r�r�r�rYrfr ri
s�










	



 




















$

zInterface.commitcCsd|d<|S)z?
        Shortcut: change the interface state to 'up'.
        �up�stater)rYrrr r��szInterface.upcCsd|d<|S)zA
        Shortcut: change the interface state to 'down'.
        �downr�r)rYrrr r��szInterface.downcCsd|d<|S)z0
        Mark the interface for removal
        r�r3r)rYrrr r��szInterface.removecCsd|d<|S)a�
        Remove the interface from the OS, but leave it in the
        database. When one will try to re-create interface with
        the same name, all the old saved attributes will apply
        to the new interface, incl. MAC-address and even the
        interface index. Please be aware, that the interface
        index can be reused by OS while the interface is "in the
        shadow state", in this case re-creation will fail.
        r�r3r)rYrrr r��s
zInterface.shadow)NNN)NNNN)N)N)NNrrr�F)-�__name__�
__module__�__qualname__�__doc__r.Z_fields_cmpr�rr&�_fieldsr�r%r#r(�extendr�r)rJr]�propertyr_rcrprqr�r�r�r�rrwrur{rzryrxr�r�r�r�rir�r�r�r��
__classcell__rr)r�r r/Ds�











-0
^+		

{r/c@sBeZdZdd�Zdd�Zddd�Zdd	�Zdd
d�Zdd
d�ZdS)�InterfacesDictcCs||_|j|jd�|_dS)N)ZRTM_NEWLINKr�)rWr��_del�
_event_map)rYrWrrr rJ�szInterfacesDict.__init__cCsh|jj��}x|D]}|j|dd�qWx|D]}|�|�q.W|jj��}x|D]}|�|�qRWdS)NT)�skip_master)rWr�r�r�r�)rYr�r�rrr �	_register�s


zInterfacesDict._registerFc
Ks�|jj��z||kr�||ddks(|rv||}||d<|�|�||ddkrl|j�d|d<WdQRX|��ntd|��n�t|jdd�}||<xf|D]^}|d	d�d
kr�t||t�r�||�d�p�||�d�||<t||t	�s�|||f|_
q�W|jj|_|j�V||d<|�dd
�|d<||d<d|d<x&dD]}||k�rB|�
|�||<�qBWWdQRX|��|�|�WdQRX|S)z.
        Create new network interface
        r3r�r>r�Nzinterface %s existsr�)rWrZ���r�r;r`r)r?r\�gidZifrrZrBr�)rW�	exclusiver�rV�beginrr/rvr$r�rPrZ�_moder�r�)rYr>r`Zreuser��devicer|r�rrr rQ�sD





zInterfacesDict.addc	Cs�|�|d�}|dkrdS|dtkrX|j�&xt|d�D]}|�|�q<WWdQRXt|dd�r�|j�d|d<WdQRXdS|�d�dkr�dS|�d|d|�dS)Nr;rtr5rRr�r3)r�r�)r$rrVr�rzr%rb)rYrr�rrrr r�szInterfacesDict._delc	Cs*|�dd�}|�dd�}d}d}||krN||krNt|jd�}||<||<n�||kr�||kr�||d}||}||<||kr�|}||jjkr�|jj||jj|<|jj|=||jjkr�|jj||jj|<|jj|=n(||d}||kr�|}||}||<||jjk�r$|j��|jj|<||jjk�r@t�|jj|<|�dd�}	|�d�}
|	|
k�r�|	|k�r�||	j�&|||	dk�r�||	�	|�WdQRX|
|k�r�|
|k�r�||
j�||
�
|�WdQRX|dk	�r�||=|�r�|�d�|�|�|
dk�r&|j�d|d<WdQRXdS)Nr;ZIFLA_IFNAME)rWr`r^ZIFLA_MASTERr7)
r$r�r/rWr6rsrXrrVrxry�stripr�)rYrrr;r`rrKZ	old_indexZold_nameZ
old_masterZ
new_masterrrr r�	sV







zInterfacesDict._newNc
Cs|jj��|dk	r.|ddkr.|ddkr.dS|dks>|dkrP||}|d}n||}|d}|�dd�}||kr�|d||d	kr�||j�||�|�WdQRX|�|d�|�|d�|jj�|d�|jj�|d�|j�d
|d<WdQRXWdQRXdS)NrGr�r=l��rrr;r`r^r7Zdetachedr3)rWrr$rVrxr�r6rs)rYr��idxrr�r^rrr rbQs(

zInterfacesDict._detach)F)F)N)	r�r�r�rJrrQrr�rbrrrr r�s
5
Hrc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
AddressesDictcCs||_|j|jd�|_dS)N)ZRTM_NEWADDRZRTM_DELADDR)rWr�rr)rYrWrrr rJmszAddressesDict.__init__cCs$x|jj��D]}|�|�qWdS)N)rWr�r�r�)rYrrrr rqszAddressesDict._registerc
Cs�x|��D]}|j��||<q
Wx|jj��D]}|�|�q.Wx:|��D].}|jj|}|j�|||d<WdQRXqJWdS)Nr6)r�rWrXr�r�r�rarV)rYr�rrZiffrrr r�uszAddressesDict.reloadc	Cs�|dtkr|�d�}n*|dtkr>|�d�}|sB|�d�}ndS|�d�|�d�|�d�|�d�pl|�d�|d|d|�d�d	�}y"||d
j||df|d�WnYnXdS)Nrt�	IFA_LOCAL�IFA_ADDRESSZ
IFA_BROADCASTZ	IFA_FLAGSr2r�Z
IFA_CACHEINFO)�localr�r�r2r�rtZ	cacheinfor;)r|r�)rr�rr$rQ)rYrr}r�rrr r��s$
"zAddressesDict._newcCsd|dtkr|�d�}n|dtkr0|�d�}ndSy||d�||df�WnYnXdS)Nrtrrr;r�)rr�rr�)rYrr}rrr r�szAddressesDict._delN)r�r�r�rJrr�r�rrrrr rls
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�NeighboursDictcCs||_|j|jd�|_dS)N)ZRTM_NEWNEIGHZRTM_DELNEIGH)rWr�rr)rYrWrrr rJ�szNeighboursDict.__init__cCs$x|jj��D]}|�|�qWdS)N)rWr�Zget_neighboursr�)rYrrrr r�szNeighboursDict._registercCsL|dtkrdSy*||dj|�d�d|�d�id�WnYnXdS)Nrtr��NDA_DSTZlladdrZ
NDA_LLADDR)r|r�)rrQr�)rYrrrr r��szNeighboursDict._newcCs>|dtkrdSy||d�|�d��WnYnXdS)Nrtr�r)rr�r�)rYrrrr r�szNeighboursDict._delN)r�r�r�rJrr�rrrrr r�srra)r��classr�Zby_namecCs
t|t�S)N)rvr
)r��vrrr r0�r1r0)�path�
constraintZby_indexcCs
t|t�S)N)rvr�)r�rrrr r0�r1r6rs)2r�r�r��socketrrrr�rrZpyroute2rZpyroute2.commonrr	r
rZpyroute2.configrZpyroute2.ipdb.exceptionsr
rrZpyroute2.ipdb.linkedsetrZpyroute2.ipdb.transactionalrrrZpyroute2.netlinkrZpyroute2.netlink.exceptionsrZpyroute2.netlink.rtnl.ifinfmsgrrr"ZRTMGRP_LINKZRTMGRP_NEIGHZRTMGRP_IPV4_IFADDRZRTMGRP_IPV6_IFADDR�groupsr)r.r/rr�rrr�rrrr �<module>sTq@9$