^! dZddlZddlZ ddlmZddlm Z ddl m Z ddl m ZmZmZmZmZmZmZmZmZdZeZ dZ!dZ"d ezd z Z#Gd d e$Z%Gd de%Z&Gdde&Z'Gdde%Z(Gdde%Z)Gdde%Z*e%Z+ddjYdgdzzdzddjYdgdzzdzddjYdgdzzdzddjYdgdzzdzddjYdgdzzdzddjYd gd zzdzddjYd gd zzdzd!d"jYd#gd$zzd%zd!d"jYd#gd&zzd%zf Z-e-Dcgc]}ej\|ej^!c}Z-d'Z0d(Z1d5d)Z2d*Z3d+Z4d5d,Z d5d-Zd5d.Zd5d/Zd5d0Zd5d1Zd5d2Zd3Zd4Zy#e$rdZYwxYwcc}w)6z 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)AF_LINK0)AddrFormatError)_is_str) valid_words int_to_words words_to_int valid_bits bits_to_int int_to_bits valid_bin int_to_bin bin_to_intMACc:eZdZdZdZeezZdezdz ZdZdZ dZ y) mac_eui48z%A standard IEEE EUI-48 dialect class.rr-z%.2XN) __name__ __module__ __qualname____doc__ word_sizewidth num_wordsmax_wordword_sepword_fmt word_base8/usr/lib/python3/dist-packages/netaddr/strategy/eui48.pyrr1s;/I"II~!HHHIr$rc*eZdZdZdZeezZdZdZdZ y)mac_unixz'A UNIX-style MAC address dialect class.r:z%xrN rrrrrrrr r!r"r#r$r%r'r'Fs#1I"IHHIr$r'ceZdZdZdZy)mac_unix_expandedz;A UNIX-style MAC address dialect class with leading zeroes.%.2xN)rrrrr!r#r$r%r+r+Os EHr$r+c*eZdZdZdZeezZdZdZdZ y) mac_ciscoz2A Cisco 'triple hextet' MAC address dialect class.r.%.4xNr)r#r$r%r.r.Ts#<I"IHHIr$r.c*eZdZdZdZeezZdZdZdZ y)mac_barez1A bare (no delimiters) MAC address dialect class.rz%.12XrNr)r#r$r%r2r2]s#;I"IHHIr$r2c*eZdZdZdZeezZdZdZdZ y) mac_pgsqlz@A PostgreSQL style (2 x 24-bit words) MAC address dialect class.r(%.6xrNr)r#r$r%r5r5fs#JI"IHHIr$r5^r(z([0-9A-F]{1,2})$rz([0-9A-F]{1,4})z\.z([0-9A-F]{5,6})z^(r3z[0-9A-F] z)$ c|tD]$} |j|}t|dk7ry&y#t$rY3wxYw)z :param addr: An IEEE EUI-48 (MAC) address in string form. :return: ``True`` if MAC address string is valid, ``False`` otherwise. rTF)RE_MAC_FORMATSfindalllen TypeError)addrregexp match_results r% valid_strrFsT ! !>>$/L< A%&    s / ;;c 2g}t|r_d}tD]D}|j|}t|dk7s#d}t |dt r|d}n|df}n|st |dt|dd}t|dk(r8tdj|Dcgc]}d t|d zc}d }|St|d k(r8tdj|Dcgc]}d t|d zc}d }|St|d k(r8tdj|Dcgc]}dt|d zc}d }|St|dk(rtdt|dd zd }|St d|dcc}wcc}wcc}w)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. FrTz is not a supported MAC format!z is not str() or unicode()!Nr9r3r,rr;r0rr7rz%012xz%unexpected word count in MAC address !) rr?r@rA isinstancetuplerrBintjoin)rCwords found_matchrDrEint_valws r% str_to_intrQs Et} $ F!>>$/L< A%" l1ou5(OE)!_.E !"OP P4ABBG 5zQbggEBqvAr 2BCRH N UqbggEBqvAr 2BCRH N UqbggEBqvAr 2BCRH N UqgE!Hb 1126 NDRSSCCCsF %F +F c|t}t||}|Dcgc]}|j|z}}|jj |}|Scc}w)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. )rrr!r rL)rOdialectrMitokensrCs r% int_to_strrVsX ' *E,1 2qg" 2F 2     (D K3sAc<tjd|dz |dzS)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)_structpackrOs r% int_to_packedr\s  <<w"}g .B CCr$cttjd|}d}tt |D]\}}|}|d|zz}||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>6Brr)listrYunpack enumeratereversed) packed_intrMrOrTnumwords r% packed_to_intres\ z2 3EGHUO,!3q1u}D.! Nr$cT|t}t||j|jSN)DEFAULT_DIALECT _valid_wordsrrrMrSs r%rrs'! w00'2C2C DDr$cT|t}t||j|jSrg)rh _int_to_wordsrrrOrSs r%rrs'! '"3"3W5F5F GGr$cT|t}t||j|jSrg)rh _words_to_intrrrjs r%r r s'!  1 173D3D EEr$cH|t}t|t|jSrg)rh _valid_bitsrr bitsrSs r%r r s!! tUG$4$4 55r$cH|t}t|t|jSrg)rh _bits_to_intrr rrs r%r r s!! eW%5%5 66r$cj|t}t||j|j|jSrg)rh _int_to_bitsrrr rms r%r r s6! ""G$5$5w7G7G IIr$c2|t}t|tSrg)rh _valid_binr)bin_valrSs r%r r s! gu %%r$c"t|tSrg) _int_to_binrr[s r%rr# w &&r$c"t|tSrg) _bin_to_intr)rzs r%rr'r}r$rg)5rstructrYre_resocketr ImportError netaddr.corernetaddr.compatrnetaddr.strategyrrirrlr ror rqr rur rwr ryrr|rrrfamily family_nameversionmax_intobjectrr'r+r.r2r5rhrLr?compile IGNORECASErFrQrVr\re)_s0r%rsZ  )"     u*q. *y  y  #((%&* ++c1#((%&* ++c1#((%&* ++c1#((%&* ++c1%**'(1, --3#((%&* ++c1#((%&* ++c1 277J<"$ %%,277J<"$ %%,!(;IIQ+#++a0I"*Z&D&E H F 6 7 I& ''kGjJsG8$G GG