x[h#ddlZddlZddlZddlmZddlmZddlmZm Z m Z ddl m Z m Z mZmZmZej"eZGddZGdd Zy) N) defaultdict) lru_cache) IPv4Address IPv4Interface IPv6Interface)DictListOptionalTupleUnionceZdZdZdZedefdZedefdZedefdZ edefdZ edefdZ y ) Ifstatez This class holds the parsed state of a BSD network interface. It is itself side-effect free. All methods with side-effects should be implemented on one of the ``BSDNetworking`` classes. c||_d|_i|_i|_d|_g|_g|_g|_d|_d|_ g|_ d|_ d|_ d|_ d|_g|_i|_g|_y)NrF)nameindexinetinet6upoptionsnd6flagsmtumetricgroups descriptionmediastatusmacmacsvlanmembers)selfrs D/usr/lib/python3/dist-packages/cloudinit/distros/parsers/ifconfig.py__init__zIfstate.__init__s        *.$( %) "&   returnc>d|jvxsd|jvS)Nloopbacklo)rrr"s r# is_loopbackzIfstate.is_loopback.sTZZ'>44;;+>>r%cvd|jvry|jgk(r|jrd|jvryy)NegressTEthernetF)rrr*s r# is_physicalzIfstate.is_physical2s6 t{{ " ;;"  djj0Hr%cd|jvS)Nbridgerr*s r# is_bridgezIfstate.is_bridge;s4;;&&r%cd|jvS)Nlaggr2r*s r#is_bondzIfstate.is_bond?s$$r%c@d|jvxs|jik7S)Nr )rr r*s r#is_vlanzIfstate.is_vlanCs$++%;499?;r%N) __name__ __module__ __qualname____doc__r$propertyboolr+r/r3r6r8r%r#rrs(?T??T'4''%%%<<}|s|ddvrO|dz }|jd}|j dr|dd}t |}||_||j|<|s`|jjj}t|dkDrm|djdrY|j|}|ik7rCtj|d|_|d |_d |vr |d |_d |vr |d |_|djd r4t'jd |d} |jj)| |ddk(rt+|d|_|ddk(r||j ddzd|_|djds(|djds|djdrNt'jd |d} t| dkDr'|xj.| djdz c_|ddk(r?|d|_|j2j)|d||dj)||ddk(r5|j2j)|d||dj)||ddk(r|xj4|ddz c_|ddk(r||j ddzd|_|ddk(r@t'jd |d} t| dkDr| djd|_|ddk(r |d|_|ddk(r9|j=|} tj| d|j>| d<|ddk(r9|jA|} tj| d|jB| d<|ddk(s|ddk(r|xjD|dz c_"|dd k(si|_#|d|jFd!<tIdt|D] } || d"k(s || dz|jFd#<"AtK||_&i|j|jLS)$a Parse the ``ifconfig -a`` output ``text``, into a dict of ``Ifstate`` objects, referenced by ``name`` *and* by ``mac`` address. This dict will always be the same, given the same input, so we can ``@lru_cache()`` it. n.b.: ``@lru_cache()`` takes only the ``__hash__()`` of the input (``text``), so it should be fairly quick, despite our giant inputs. @param text: The output of ``ifconfig -a`` @returns: A dict of ``Ifstate``s, referenced by ``name`` and ``mac`` rN)  :zflags=rrrrz capabilities=<|>rz description:zoptions=ec_capabilities ec_enabled,etherhwaddrzgroups:zmedia:z: rrrrzmember:z laggport:zvlan:idz interface:link)'rlist splitlinessplitendswithrrrDlowerstriplen startswith _parse_flagscopydeepcopyrrrrreappendintrrrrrrrr _parse_inetr _parse_inet6rr!r rangedictrE)r"rFifindex ifs_by_macdevlinecuriftoksrcapsrnd6_optsipis r#parsezIfconfig.parseWsj & OO%^ 7DAwk) 1  Q>>#&!#2JEen# +.!!%(::<%%'--/D4y1}a!3!3H!=))$/B; $ eGn =CI"4[CF~"',5(%*8_ Aw!!/2xxQ0   &Aw'!QL Aw.("&tzz#':'<"=Q"":.7%%&787%%l3((6473wtAw'B"**oG+c$q'1o67G$q'7; EQ c*ICd{ JJsOA.  //5 #y9:B DG^tAw'BQ c*1-I++D1I$q'9=>B)) E2++ EBEE )eDEEr%cRtjd|d}i}t|dkDr}|djd|d<d|dvrd|d<nd|d<tdt|D]<}||d k(rt ||dz|d < ||d k(s)t ||dz|d <>|S) NrMrJrQrrTFrNrr)rarXr\rfrc)r"rmrretts r#r^zIfconfig._parse_flagssa) u:> 8>>#.CLs7|# D !D 1c$i( 27h&$'QU $4CM!W%!$T!a%[!1CJ  2  r%N)r9r:r;r<r$rrzrr rr rrrirVr rgrdr}rer^r?r%r#rArAHs[q9#q9$sE'4=2H,I'I"Jq9q9f   sDy)9 *# FF%T *:F2$r%rA)r_loggingra collectionsr functoolsr ipaddressrrrtypingrr r r r getLoggerr9LOGrrAr?r%r#rsK  #??55g!3<3