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/__pycache__/common.cpython-37.pyc
B

��f�E�@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZe�e
�ZyeZeZeZWn2ek
r�eefZddlmZeZejZYnXdZdZdZdae	��adddd	d	d
d
ddd
d�
Zdddddddddd�	Zdddd	dd
ddddddddddddd�ZGdd �d e �Z!Gd!d"�d"e �Z"Gd#d$�d$e#�Z$dFd%d&�Z%ej&fd'd(�Z'ej&fd)d*�Z(d+d,�Z)dGd-d.�Z*d/d0�Z+dHd1d2�Z,Gd3d4�d4e �Z-d5d6�Z.d7d8�Z/ej0dd9k�r�e/Z1ne.Z1d:d;�Z2d<d=�Z3d>d?�Z4d@dA�Z5dBdC�Z6dDdE�Z7dS)Iz
Common utilities
�N)�reduce��i�iii@g`@gAg�A)
�b�k�kb�m�mb�g�gb�kbit�mbit�gbiti�i@B)	�s�secZsecs�msZmsec�msecs�usZusecZusecsiʚ;llJ)��i i@i�izllP�9l lQJ)�bitZKibitr
ZmibitrZgibitrZtibitZtbitZBpsZKiBpsZKBpsZMiBpsZMBpsZGiBpsZGBpsZTiBpsZTBpsc@sveZdZdZdddd�fdd�Zdd�Zd	d
�Zdd�Zdd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�Viewz2
    A read-only view of a dictionary object.
    NcCsdS)NT�)r�vrr�@/opt/alt/python37/lib/python3.7/site-packages/pyroute2/common.py�<lambda>c�z
View.<lambda>cCsJ|dk	r|ni|_|dk	r@|�d�}x|D]}t|j|�|_q*W||_dS)N�/)�src�split�getattr�
constraint)�selfr�pathr!�steprrr�__init__cs

z
View.__init__cCs ||��kr|j|St��dS)N)�keysr�KeyError)r"�keyrrr�__getitem__ks
zView.__getitem__cCs
t��dS)N)�NotImplementedError)r"r(�valuerrr�__setitem__pszView.__setitem__cCs
t��dS)N)r*)r"r(rrr�__delitem__sszView.__delitem__cCs"y||Stk
r|SXdS)N)r')r"r(�defaultrrr�getvszView.getcCsrg}xht|j���D]V\}}y|�||�r8|�||f�Wqtk
rh}zt�d|�Wdd}~XYqXqW|S)Nzview filter error: %s)�tupler�itemsr!�append�	Exception�log�error)r"�retr(r+�errr�_filter|s"zView._filtercCsdd�|��D�S)NcSsg|]}|d�qS)rr)�.0�xrrr�
<listcomp>�szView.keys.<locals>.<listcomp>)r8)r"rrrr&�sz	View.keyscCsdd�|��D�S)NcSsg|]}|d�qS)rr)r9r:rrrr;�szView.values.<locals>.<listcomp>)r8)r"rrr�values�szView.valuescCs|��S)N)r8)r"rrrr1�sz
View.itemsccsx|��D]
}|Vq
WdS)N)r&)r"r(rrr�__iter__�sz
View.__iter__cCstt|����S)N)�repr�dictr8)r"rrr�__repr__�sz
View.__repr__)N)�__name__�
__module__�__qualname__�__doc__r%r)r,r-r/r8r&r<r1r=r@rrrrr^s

rc@s&eZdZddd�Zdd�Zdd�ZdS)	�	NamespaceNcCs||_|pi|_dS)N)�parent�override)r"rFrGrrrr%�szNamespace.__init__cCsX|dkrt�||�S||jkr(|j|St|j|�}t|tj�rPt|�|j	|�}|SdS)N)rFrG)
�object�__getattr__rGr rF�
isinstance�types�
MethodType�type�__func__)r"r(r6rrrrI�s

zNamespace.__getattr__cCs@|dkrt�|||�n$||jkr.||j|<nt|j||�dS)N)rFrG)rH�__setattr__rG�setattrrF)r"r(r+rrrrO�s

zNamespace.__setattr__)N)rArBrCr%rIrOrrrrrE�s
rEc@s:eZdZdZe�d�Zdd�Zdd�Zdd�Z	d	d
�Z
dS)�Dotkeysa�
    This is a sick-minded hack of dict, intended to be an eye-candy.
    It allows to get dict's items by dot reference:

    ipdb["lo"] == ipdb.lo
    ipdb["eth0"] == ipdb.eth0

    Obviously, it will not work for some cases, like unicode names
    of interfaces and so on. Beside of that, it introduces some
    complexity.

    But it simplifies live for old-school admins, who works with good
    old "lo", "eth0", and like that naming schemes.
    z^[a-zA-Z_]+[a-zA-Z_0-9]*$cs�fdd��D�S)Ncs&g|]}t|t�r�j�|�r|�qSr)rJ�str�_Dotkeys__var_name�match)r9�i)r"rrr;�sz#Dotkeys.__dir__.<locals>.<listcomp>r)r"r)r"r�__dir__�szDotkeys.__dir__c
sxyt����Stk
rr}zH�dkr,|�n6�dd�dkrN��fdd�}|S��kr^��S|�Wdd}~XYnXdS)N�__deepcopy__��set_cs|��dd�<�S)NrXr)r+)r(r"rr�	set_value�sz+Dotkeys.__getattribute__.<locals>.set_value)r?�__getattribute__�AttributeError)r"r(�argvr7rZr)r(r"rr[�szDotkeys.__getattribute__cCs$||kr|||<nt�|||�dS)N)r?rO)r"r(r+rrrrO�s
zDotkeys.__setattr__cCs ||kr||=nt�||�dS)N)r?�__delattr__)r"r(rrrr^�szDotkeys.__delattr__N)rArBrCrD�re�compilerSrVr[rOr^rrrrrQ�s
rQcsndd��fdd�d�}t�tj�s*|��t���fdd����D��}t���fdd����D��}||fS)u�
    Take the namespace prefix, list all constants and build two
    dictionaries -- straight and reverse mappings. E.g.:

    ## neighbor attributes
    NDA_UNSPEC = 0
    NDA_DST = 1
    NDA_LLADDR = 2
    NDA_CACHEINFO = 3
    NDA_PROBES = 4
    (NDA_NAMES, NDA_VALUES) = map_namespace('NDA', globals())

    Will lead to::

        NDA_NAMES = {'NDA_UNSPEC': 0,
                     ...
                     'NDA_PROBES': 4}
        NDA_VALUES = {0: 'NDA_UNSPEC',
                      ...
                      4: 'NDA_PROBES'}

    The `normalize` parameter can be:

        - None — no name transformation will be done
        - True — cut the prefix and `lower()` the rest
        - lambda x: … — apply the function to every name
    cSs|S)Nr)r:rrrr	rzmap_namespace.<locals>.<lambda>cs|t��d���S)N)�len�lower)r:)�prefixrrr	r)NTcs&g|]}|���r�|��|f�qSr)�
startswith)r9rU)�	normalize�nsrcrrr;sz!map_namespace.<locals>.<listcomp>cs&g|]}|���r�|�|�f�qSr)rd)r9rU)rerfrcrrr;s)rJrK�FunctionTyper?r&)rcrfreZnmapZby_nameZby_valuer)rerfrcr�
map_namespace�srhcCs�t�||�}|tjkr0t�d|�d}d}d}n<|tjkrdt�d|�}|dd>|dB}d}d	}ntd
��|||>|@}||@||?B}|tjkr�t�d|�}nt�d|d?||d?@�}t�||�S)Nz>Irl��� z>QQ�@rl	����������zfamily not supported)	�socket�	inet_pton�AF_INET�struct�unpack�AF_INET6r*�pack�	inet_ntop)�addr�mask�familyrU�a�lengthr	�nrrr�getbroadcasts"


rzc
Cs`d}t�||�}xJtt|�d�D]6}|tt�d||d|dd��d��d�7}q"W|S)z:
    IPv4 dotted quad notation to int mask conversion
    rrX�I�1)rlrm�rangera�binrorp�count)rurvr6�binary�offsetrrr�dqn2int1s&r�cCs|�d�dkrtjStjSdS)N�:���)�findrlrqrn)�addressrrr�get_address_family>sr�cCs d�dd�|d|�p|D��S)z<
    Represent byte string as hex -- for debug purposes
    r�css|]}d�|�VqdS)z{0:02x}N)�format)r9�crrr�	<genexpr>Iszhexdump.<locals>.<genexpr>N)�join)�payloadrxrrr�hexdumpEsr�cCsttdd�|�d�D���S)Ncss|]}t|d�VqdS)�N)�int)r9r:rrrr�Mszhexload.<locals>.<genexpr>r�)�bytes�	bytearrayr)�datarrr�hexloadLsr�c
Cs�d}d}d}d}t|t�r8t��}|�|�|�d�n|}�x.|��D�] }|dk	r`||7}qH|dk	rr||7}qHd}t|�}	x�||	k�rh||dkr�|d7}q�||dkr�|||d�dkr�d}n*|||d�d	kr�|�d
�d�	�}d}Pq�||dk�r|S||dk�r@|t
t||d|d
�d��7}|d
7}q�|t
t|||d�d��7}|d7}q�WqHWt|t��r�|dk	�r�||d<|dk	�r�|||<t
jddk�r�t|d�S|SdS)a�
    Load a packet dump from an open file-like object or a string.

    Supported dump formats:

    * strace hex dump (\x00\x00...)
    * pyroute2 hex dump (00:00:...)

    Simple markup is also supported. Any data from # or ;
    till the end of the string is a comment and ignored.
    Any data after . till EOF is ignored as well.

    With #! starts an optional code block. All the data
    in the code block will be read and returned via
    metadata dictionary.
    �Nr)� �	�
r�#�z#!z#:r��.�\rXr���code�3z	iso8859-1)rJrR�io�StringIO�write�seek�	readlinesrar�strip�chrr�r?�sys�versionr�)
�f�metar�r�Z	meta_dataZ
meta_labelZio_objrwr�rxrrr�	load_dumpPsV


"



r�c@sHeZdZdZdZddd�Zdd	�Zd
d�Zdd
�Zdd�Z	ddd�Z
dS)�AddrPoolz
    Address pool
    l�������FcCs�d|_|j}||_||_d|_|jr6t|jt�s6t��g|_x|rZ|dL}|jd7_q>W|jd9_t|||jd�|_	|jg|_
||_||_t
��|_dS)Nrrr)�	cell_size�cell�reverse�release�	allocatedrJr��	TypeError�ban�cells�addr_map�minaddr�maxaddr�	threading�RLock�lock)r"r�r�r�r�Zmxrrrr%�s"
zAddrPool.__init__c	Csv|j��dxJt|j�D]<}|ddkrB|�|d�|j�|�q|dd8<qWd}x�|jD]�}|�r,d}x6d|>|j|@r�|j|d|>N<P|d7}qrW||j|}|jr�|j|}n
||j	}|j	|kr�|jk�rnn*|j
�r|j||j
d�|jd7_|S|�|�td��|d7}qbWt
|j�|jk�r`|j�|j�|��Std��WdQRXdS)N�counterrrtr)r�zno free address available)r�r0r��free�remover�r�r�r�r�r�r�r'rar�r2r��alloc)r"�item�baser�rr6rrrr��s>


zAddrPool.alloccCs�|j��g}d}z\yDx>t|�D]2}|��}y|�|�Wq|�|�YqXqW|Sd}�YnXWd|r�x|D]}|�|�qxWXWdQRXdS)NFT)r�r}r�r2r�)r"r�	addressesZraised�_rtrrr�alloc_multi�s"
zAddrPool.alloc_multicCsl|jr|j|}n
||j8}||j}||j}y|j|d|>@}Wntk
r`d}YnX|||fS)NrF)r�r�r�r�r��
IndexError)r"rtr�r�is_allocatedrrr�locate�s



zAddrPool.locatec	Cs�|dkrt��|j�z|�|�\}}}|dkrX|rX|jd8_|j|d|>O<n2|dkr�|s�|jd7_|j|d|>M<WdQRXdS)N)r�r�r�rr�)r�r�r�r�r�)r"rtr+r�rr�rrr�setaddr	szAddrPool.setaddrrc	Cs�|j��|dkr$|j�||d��nd|�|�\}}}t|j�|krJtd��|j|d|>@rdtd��|jd8_|j|d|>N<WdQRXdS)Nr)rtr�zaddress is not allocatedr)r�r�r2r�rar�r'r�)r"rtr�r�rr�rrrr�sz
AddrPool.freeN)r�r�FF)r)rArBrCrDr�r%r�r�r�r�r�rrrrr��s
.
r�cCsBd}x4tt|��D]$}|d9}|t�d||�dN}qW|d@S)z�
    FNV1 -- 32bit hash, python2 version

    @param data: input
    @type data: bytes

    @return: 32bit int hash
    @rtype: int

    See: http://www.isthe.com/chongo/tech/comp/fnv/index.html
    l�9i��Brl��)r}rarorp)r��hvalrUrrr�
_fnv1_python2#s
r�cCs6d}x(tt|��D]}|d9}|||N}qW|d@S)z�
    FNV1 -- 32bit hash, python3 version

    @param data: input
    @type data: bytes

    @return: 32bit int hash
    @rtype: int

    See: http://www.isthe.com/chongo/tech/comp/fnv/index.html
    l�9i�l��)r}ra)r�r�rUrrr�
_fnv1_python36s
r�r�c	CsLt�>t}x.|tkr8tt�dtt��d�t����}qW|a|SQRXdS)z�
    Return 32bit UUID, based on the current time and pid.

    @return: 32bit int uuid
    @rtype: int

    The uuid is guaranteed to be unique within one process.
    ZQQi@BN)	�_uuid32_lock�_uuid32�fnv1rorrr��time�os�getpid)�	candidaterrr�uuid32Os
$r�cCs
dt�S)zo
    Return a unique interface name based on a prime function

    @return: interface name
    @rtype: str
    zpr%x)r�rrrr�uifnameesr�cs��fdd�}|S)z*
    Decorator to map exception types
    cs���fdd�}|S)Nc
sHy�||�Wn4tk
rB}z�|�r0�|���Wdd}~XYnXdS)N)r3)r]�kwargr7)r�rT�substrr�	decoratedusz1map_exception.<locals>.wrapper.<locals>.decoratedr)r�r�)rTr�)r�r�wrappertszmap_exception.<locals>.wrapperr)rTr�r�r)rTr�r�
map_exceptionosr�cCstdd�dd��|�S)z3
    Shortcut to map OSError(2) -> OSError(95)
    cSst|t�o|jtjkS)N)rJ�OSError�errno�ENOENT)r:rrrr�rzmap_enoent.<locals>.<lambda>cSsttjd�S)NzOperation not supported)r�r��
EOPNOTSUPP)r:rrrr�r)r�)r�rrr�
map_enoent�sr�cs�fdd�}|S)Ncs|i}ddg}|j�d�}t|ttf�s,|g}x|D]}|�|�q2Wx&|j��D]\}}||krP|||<qPW�|j|j|�S)N�__dict__�__weakref__�	__slots__)	r�r/rJ�listr0r2r1rA�	__bases__)�clsZnvars�skip�slotsrr)�mcrr�wrapped�s
zmetaclass.<locals>.wrappedr)r�r�r)r�r�	metaclass�s
r�csG�fdd�dt�}|S)NcseZdZ�fdd�ZdS)z!failed_class.<locals>.FailedClasscst��}d|_|�dS)NF)�RuntimeErrorZfeature_supported)r"r]r�r6)�messagerrr%�sz*failed_class.<locals>.FailedClass.__init__N)rArBrCr%r)r�rr�FailedClass�sr�)rH)r�r�r)r�r�failed_class�sr�)N)r)N)8rDr�r��loggingr�r_rlror�r�r�rK�	getLoggerrAr4�
basestringr�file�	NameErrorrRr��	functools�BytesIOZAF_MPLSZAF_PIPEZDEFAULT_RCVBUFr��Lockr�Z
size_suffixesZ
time_suffixesZ
rate_suffixesrHrrEr?rQrhrnrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr�<module>s�
9 6
*


J