o x[h#@sddlZddlZddlZddlmZddlmZddlmZm Z m Z ddl m Z m Z mZmZmZeeZGdddZGdd d ZdS) N) defaultdict) lru_cache) IPv4Address IPv4Interface IPv6Interface)DictListOptionalTupleUnionc@sreZdZdZddZedefddZedefddZedefd d Z edefd d Z edefd dZ dS)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. cCsp||_d|_i|_i|_d|_g|_g|_g|_d|_d|_ g|_ d|_ d|_ d|_ d|_g|_i|_g|_dS)NrF)nameindexinetinet6upoptionsnd6flagsmtumetricgroups descriptionmediastatusmacmacsvlanmembers)selfr r D/usr/lib/python3/dist-packages/cloudinit/distros/parsers/ifconfig.py__init__s$ zIfstate.__init__returncCsd|jvp d|jvS)Nloopbacklo)rrrr r r! is_loopback.zIfstate.is_loopbackcCs0d|jvrdS|jgkr|jrd|jvrdSdS)NegressTEthernetF)rrr&r r r! is_physical2s zIfstate.is_physicalcC d|jvS)Nbridgerr&r r r! is_bridge; zIfstate.is_bridgecCr,)Nlaggr.r&r r r!is_bond?r0zIfstate.is_bondcCsd|jvp |jikS)Nr)rrr&r r r!is_vlanCr(zIfstate.is_vlanN) __name__ __module__ __qualname____doc__r"propertyboolr'r+r/r2r3r r r r!r sr c @seZdZdZddZededeeee e e fffddZ dd Z d e deeeffd d Zd dZd e deeeffddZd e defddZdS)Ifconfiga8 A parser for BSD style ``ifconfig(8)`` output. For documentation here: - https://man.freebsd.org/ifconfig(8) - https://man.netbsd.org/ifconfig.8 - https://man.openbsd.org/ifconfig.8 All output is considered equally, and then massaged into a singular form: an ``Ifstate`` object. cCsi|_i|_dSN) _ifs_by_name _ifs_by_macr&r r r!r"Ss zIfconfig.__init__textr#cCsd}tt}d}|D]}|sq |ddvr9|d7}|d}|dr-|dd}t|}||_||j|<|srz description:zoptions=ec_capabilities ec_enabled,etherhwaddrzgroups:zmedia:z: rrrrzmember:z laggport:zvlan:idz interface:link)'rlist splitlinessplitendswithr rr<lowerstriplen startswith _parse_flagscopydeepcopyrrrrreappendintrrrrrrrr _parse_inetr _parse_inet6rrrrangedictr=)rr>ifindex ifs_by_macdevlinecuriftoksrcapsrnd6_optsipir r r!parseWs                      zIfconfig.parsecCs|jSr;)r=r&r r r!r`szIfconfig.ifs_by_macrdcCsd}d|dvrt|d}t|j}nttt|dd}td|d|f}d|vr6||dd}|jdd}t|j|||dfS)N/rAr%s/%s broadcast)netmaskrm prefixlen) rstrrnrrZrwith_prefixlenrOrg)rrdrmrgrnror r r!r[s   zIfconfig._parse_inetcCs4tdt|D]}||dkr||dSqdS)NrErorA)r]rS)rrdrhr r r!_get_prefixlens  zIfconfig._get_prefixlencCsd}d|dvr-d}|dd\}}d|vr|dd}n||}td||f}n%d|dvrCt|d}|ddd}n||}td|d|f}|sZ|jrZd}n|sa|jrad}t|j||dfS)N%rAz link-localrjrlz site-local)roscope)rOrrr is_link_local is_site_localrprg)rrdrtip6restrorgr r r!r\s$       zIfconfig._parse_inet6cCstd|d}i}t|dkrS|dd|d<d|dvr$d|d<nd|d<tdt|D]#}||d krBt||d|d <q/||d krRt||d|d <q/|S) NrDrArHrrTFrErr)rXrOrSr]rZ)rrdrrettr r r!rUs     zIfconfig._parse_flagsN)r4r5r6r7r"rrprr r rrir`rMr r^r[rrr\rUr r r r!r:Hs (sr:)rVloggingrX collectionsr functoolsr ipaddressrrrtypingrrr r r getLoggerr4LOGr r:r r r r!s   6