fJ$ddlZddlZddlZddlmZddlmZddlmZm Z m Z ddl m Z m Z mZmZmZej"eZdZGddZGd d Zy) N) defaultdict) lru_cache) IPv4Address IPv4Interface IPv6Interface)DictListOptionalTupleUnionz"([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}ceZdZdZdZedefdZedefdZedefdZ 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_loopback0sTZZ'>44;;+>>r%cvd|jvry|jgk(r|jrd|jvryy)NegressTEthernetF)rrr*s r# is_physicalzIfstate.is_physical4s6 t{{ " ;;"  djj0Hr%cd|jvS)Nbridgerr*s r# is_bridgezIfstate.is_bridge=s4;;&&r%cd|jvS)Nlaggr2r*s r#is_bondzIfstate.is_bondAs$$r%c@d|jvxs|jik7S)Nr )rr r*s r#is_vlanzIfstate.is_vlanEs$++%;499?;r%N) __name__ __module__ __qualname____doc__r$propertyboolr+r/r3r6r8r%r#rrs(?T??T'4''%%%<<| 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#<"MtK||_&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 splitlineslensplitendswithrrrDlowerstrip startswith _parse_flagscopydeepcopyrrrrreappendintrrrrrrrr _parse_inetr _parse_inet6rr!r rangedictrE)r"rFifindex ifs_by_macdevlinecuriftoksrcapsrnd6_optsipis r#parsezIfconfig.parseYsr & OO%^ 7D4yA~Awk) 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"**oGd" K!81!<= +c$q'1o67Gd" K!81!<= $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)rarYrXrfrc)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#rArAJs[q9#q9$sE'4=2H,I'I"Jq9q9f   sDy)9 .# FF%T *:F2$r%rA)r_loggingra collectionsr functoolsr ipaddressrrrtypingrr r r r getLoggerr9LOGMAC_RErrAr?r%r#rsP  #??55g! 23<3