
    $g                         d Z ddlZddlZddlmZ ddlmZ	m
ZmZmZmZmZmZmZmZ dZdZdez  dz
  Z G d d	e          Z G d
 de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z#eZ$d dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd%                    dgdz            z   dz   dd %                    d!gd"z            z   d#z   dd %                    d!gd$z            z   d#z   f	D             Z&d% Z'd& Z(d3d'Z)d( Z*d) Z+d3d*Zd3d+Z
d3d,Zd3d-Zd3d.Zd3d/Zd3d0Zd1 Zd2 ZdS )4z
IEEE 48-bit EUI (MAC address) logic.

Supports numerous MAC string formats including Cisco's triple hextet as well
as bare MACs containing no delimiters.
    N)AddrFormatError)	valid_wordsint_to_wordswords_to_int
valid_bitsbits_to_intint_to_bits	valid_bin
int_to_bin
bin_to_int0         c                   <    e Zd ZdZdZeez  Zdez  dz
  ZdZdZ	dZ
dS )		mac_eui48z%A standard IEEE EUI-48 dialect class.   r   r   -z%.2X   N)__name__
__module____qualname____doc__	word_sizewidth	num_wordsmax_wordword_sepword_fmt	word_base     V/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/netaddr/strategy/eui48.pyr   r   +   sL        // I "I )|aH H H IIIr!   r   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )mac_unixz'A UNIX-style MAC address dialect class.r   :z%xr   N
r   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r$   A   s2        11I"IHHIIIr!   r$   c                       e Zd ZdZdZdS )mac_unix_expandedz;A UNIX-style MAC address dialect class with leading zeroes.%.2xN)r   r   r   r   r   r    r!   r"   r(   r(   K   s        EEHHHr!   r(   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )	mac_ciscoz2A Cisco 'triple hextet' MAC address dialect class.r   .%.4xNr&   r    r!   r"   r+   r+   Q   s2        <<I"IHHIIIr!   r+   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )mac_barez1A bare (no delimiters) MAC address dialect class.r    z%.12Xr   Nr&   r    r!   r"   r/   r/   [   s2        ;;I"IHHIIIr!   r/   c                   ,    e Zd ZdZdZeez  ZdZdZdZ	dS )	mac_pgsqlz@A PostgreSQL style (2 x 24-bit words) MAC address dialect class.   r%   %.6xr   Nr&   r    r!   r"   r2   r2   e   s2        JJI"IHHIIIr!   r2   c                 L    g | ]!}t          j        |t           j                  "S r    )_recompile
IGNORECASE).0_s     r"   
<listcomp>r;   v   s6       	 K3>""  r!   ^r%   z([0-9A-F]{1,2})   $r   z([0-9A-F]{1,4})   z\.z([0-9A-F]{5,6})z^(r0   z[0-9A-F]   z)$   c                     t           D ]>}	 |                    |           }t          |          dk    r dS /# t          $ r Y ;w xY wdS )z
    :param addr: An IEEE EUI-48 (MAC) address in string form.

    :return: ``True`` if MAC address string is valid, ``False`` otherwise.
    r   TF)RE_MAC_FORMATSfindalllen	TypeError)addrregexpmatch_results      r"   	valid_strrJ      so     !  	!>>$//L<  A%%tt & 	 	 	D	 5s   (7
AAc                 r   g }t          | t                    rzd}t          D ][}|                    |           }t	          |          dk    r1d}t          |d         t
                    r	|d         }n	|d         f} n\|st          | d          nt          | d          d}t	          |          dk    r.t          d	                    d	 |D                       d
          }nt	          |          dk    r.t          d	                    d |D                       d
          }nt	          |          dk    r.t          d	                    d |D                       d
          }nNt	          |          dk    r(t          dt          |d         d
          z  d
          }nt          d| d          |S )z
    :param addr: An IEEE EUI-48 (MAC) address in string form.

    :return: An unsigned integer that is equivalent to value represented
        by EUI-48/MAC string address formatted according to the dialect
        settings.
    Fr   Tz is not a supported MAC format!z is not str() or unicode()!Nr=   r0   c                 4    g | ]}d t          |d          z  S )r)   r   intr9   ws     r"   r;   zstr_to_int.<locals>.<listcomp>   %    BBBqvAr

2BBBr!   r   r?   c                 4    g | ]}d t          |d          z  S )r-   r   rM   rO   s     r"   r;   zstr_to_int.<locals>.<listcomp>   rQ   r!   r   c                 4    g | ]}d t          |d          z  S )r4   r   rM   rO   s     r"   r;   zstr_to_int.<locals>.<listcomp>   rQ   r!   r   z%012xz%unexpected word count in MAC address !)

isinstancestrrC   rD   rE   tupler   rF   rN   join)rG   wordsfound_matchrH   rI   int_vals         r"   
str_to_intr\      s    E$ C$ 	 	F!>>$//L<  A%%"l1ou55 /(OEE)!_.E &  	Q!"OPPP	Q 444ABBBG
5zzQbggBBEBBBCCRHH	UqbggBBEBBBCCRHH	UqbggBBEBBBCCRHH	UqgE!Hb 1 11266oDDDRSSSNr!   c                     t           t          |           }fd|D             }j                            |          }|S )a  
    :param int_val: An unsigned integer.

    :param dialect: (optional) a Python class defining formatting options.

    :return: An IEEE EUI-48 (MAC) address string that is equivalent to
        unsigned integer formatted according to the dialect settings.
    Nc                 $    g | ]}j         |z  S r    )r   )r9   idialects     r"   r;   zint_to_str.<locals>.<listcomp>   s!    222qg"222r!   )r   r   r   rX   )r[   r`   rY   tokensrG   s    `   r"   
int_to_strrb      sR     '**E2222E222F  ((DKr!   c                 :    t          j        d| dz	  | dz            S )z
    :param int_val: the integer to be packed.

    :return: a packed string that is equivalent to value represented by an
    unsigned integer.
    z>HI    l    )_structpackr[   s    r"   int_to_packedrh      s!     <w"}g
.BCCCr!   c                     t          t          j        d|                     }d}t          t	          |                    D ]\  }}|}|d|z  z  }||z  }|S )a  
    :param packed_int: a packed string containing an unsigned integer.
        It is assumed that string is packed in network byte order.

    :return: An unsigned integer equivalent to value of network address
        represented by packed binary string.
    z>6Br   r   )listre   unpack	enumeratereversed)
packed_intrY   r[   r_   numwords         r"   packed_to_intrq      se     z2233EGHUOO,, ! !3q1u}D.Nr!   c                 J    |t           }t          | |j        |j                  S N)DEFAULT_DIALECT_valid_wordsr   r   rY   r`   s     r"   r   r      s$    !w0'2CDDDr!   c                 J    |t           }t          | |j        |j                  S rs   )rt   _int_to_wordsr   r   r[   r`   s     r"   r   r      s$    !'"3W5FGGGr!   c                 J    |t           }t          | |j        |j                  S rs   )rt   _words_to_intr   r   rv   s     r"   r   r     s$    ! 173DEEEr!   c                 J    |t           }t          | t          |j                  S rs   )rt   _valid_bitsr   r   bitsr`   s     r"   r   r   
  s!    !tUG$4555r!   c                 J    |t           }t          | t          |j                  S rs   )rt   _bits_to_intr   r   r~   s     r"   r   r     s!    !eW%5666r!   c                 V    |t           }t          | |j        |j        |j                  S rs   )rt   _int_to_bitsr   r   r   ry   s     r"   r	   r	     s)    !!2G4EwGWXXXr!   c                 >    |t           }t          | t                    S rs   )rt   
_valid_binr   )bin_valr`   s     r"   r
   r
     s    !gu%%%r!   c                 ,    t          | t                    S rs   )_int_to_binr   rg   s    r"   r   r   "      w&&&r!   c                 ,    t          | t                    S rs   )_bin_to_intr   )r   s    r"   r   r   &  r   r!   rs   ),r   structre   rer6   netaddr.corer   netaddr.strategyr   ru   r   rx   r   r{   r   r}   r   r   r	   r   r
   r   r   r   r   r   r   versionmax_intobjectr   r$   r(   r+   r/   r2   rt   rX   rC   rJ   r\   rb   rh   rq   r    r!   r"   <module>r      s3            ) ( ( ( ( (
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	  U(Q,       ,    y              	       y       	      	chh)*Q.///#5chh)*Q.///#5chh)*Q.///#5chh)*Q.///#5ejj+,q0111C7chh)*Q.///#5chh)*Q.///#5rww
|b()))D0rww
|b()))D0  (  "* * *Z   &D D D  &E E E EH H H HF F F F6 6 6 67 7 7 7Y Y Y Y& & & &' ' '' ' ' ' 'r!   