+
    ˜qgj¦#  ã                   ó²   € ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtH	t	H
t
 ^ RIHtHtHtHtHt ]P"                  ! ]4      t ! R R4      t ! R R	4      tR# )
é    N)Údefaultdict)Ú	lru_cache)ÚIPv4AddressÚIPv4InterfaceÚIPv6Interface)ÚDictÚListÚOptionalÚTupleÚUnionc                   ó¶   a € ] tR t^t o RtR t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t	]V 3R	 lR
 l4       t
]V 3R lR l4       tRtV tR# )Ú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                ó   € Wn         ^ V n        / V n        / V n        RV n        . V n        . V n        . V n        ^ V n        ^ V n	        . V n
        RV n        RV n        RV n        RV n        . V n        / V n        . V n        R# )r   FN)ÚnameÚindexÚinetÚinet6ÚupÚoptionsÚnd6ÚflagsÚmtuÚmetricÚgroupsÚdescriptionÚmediaÚstatusÚmacÚmacsÚvlanÚmembers)Úselfr   s   &&ÚD/usr/lib/python3/dist-packages/cloudinit/distros/parsers/ifconfig.pyÚ__init__ÚIfstate.__init__   s   € ØŒ	ØˆŒ
ØˆŒ	ØˆŒ
ØˆŒØˆŒØˆŒØˆŒ
ØˆŒØˆŒØˆŒØ*.ˆÔØ$(ˆŒ
Ø%)ˆŒØ"&ˆŒØˆŒ	ØˆŒ	ØˆŽó    c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Úbool)ÚformatÚ__classdict__s   "€r#   Ú__annotate__ÚIfstate.__annotate__/   s   ø€ ÷ ?ñ ?™Tñ ?r&   c                óN   € R V P                   9   ;'       g    RV P                  9   # )ÚloopbackÚlo)r   r   ©r"   s   &r#   Úis_loopbackÚIfstate.is_loopback.   s"   € à˜TŸZ™ZÑ'×>Ð>¨4°4·;±;Ñ+>Ð>r&   c                ó    <€ V ^8„  d   QhRS[ /# r(   r+   )r-   r.   s   "€r#   r/   r0   3   s   ø€ ÷ ñ ™Tñ r&   c                ó˜   € R V P                   9   d   R# V P                   . 8X  d&   V P                  '       d   RV P                  9   d   R# R# )ÚegressTÚEthernetF)r   r   r4   s   &r#   Úis_physicalÚIfstate.is_physical2   s8   € ð �t—{‘{Ô"ÙØ�;‰;˜"Ô §§ °
¸d¿j¹jÔ0HÙÙr&   c                ó    <€ V ^8„  d   QhRS[ /# r(   r+   )r-   r.   s   "€r#   r/   r0   <   s   ø€ ÷ 'ñ '™4ñ 'r&   c                ó    € R V P                   9   # )Úbridge©r   r4   s   &r#   Ú	is_bridgeÚIfstate.is_bridge;   s   € à˜4Ÿ;™;Ñ&Ð&r&   c                ó    <€ V ^8„  d   QhRS[ /# r(   r+   )r-   r.   s   "€r#   r/   r0   @   s   ø€ ÷ %ñ %™ñ %r&   c                ó    € R V P                   9   # )Úlaggr@   r4   s   &r#   Úis_bondÚIfstate.is_bond?   s   € à˜Ÿ™Ñ$Ð$r&   c                ó    <€ V ^8„  d   QhRS[ /# r(   r+   )r-   r.   s   "€r#   r/   r0   D   s   ø€ ÷ <ñ <™ñ <r&   c                óN   € R V P                   9   ;'       g    V P                  / 8g  # )r    )r   r    r4   s   &r#   Úis_vlanÚIfstate.is_vlanC   s!   € à˜$Ÿ+™+Ñ%×;Ð;¨4¯9©9¸©?Ð;r&   )r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r    N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r$   Úpropertyr5   r;   rA   rF   rJ   Ú__static_attributes__Ú__classdictcell__©r.   s   @r#   r   r      ss   ø‡ € ñòð( ÷?ó ð?ð ÷ó ðð ÷'ó ð'ð ÷%ó ð%ð ÷<ó ö<r&   r   c                   ó’   a € ] tR t^Ht o RtR t]! 4       V 3R lR l4       tR tV 3R lR lt	R t
V 3R	 lR
 ltV 3R lR ltRtV tR# )ÚIfconfiga  
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.
c                ó"   € / V n         / V n        R # ©N)Ú_ifs_by_nameÚ_ifs_by_macr4   s   &r#   r$   ÚIfconfig.__init__S   s   € ØˆÔØˆÖr&   c          	      ób   <€ V ^8„  d   QhRS[ RS[S[ S[S[S[S[,          3,          3,          /# )r)   Útextr*   )Ústrr   r   r   r	   )r-   r.   s   "€r#   r/   ÚIfconfig.__annotate__X   s7   ø€ ÷ q9ñ q9™#ð q9¡$¡s©E±'¹4Á½=Ð2HÕ,IÐ'IÕ"Jñ q9r&   c                ó–  € ^ p\        \        4      pRpVP                  4        EFx  pV'       g   K  V^ ,          R 9  d\   V^,          pVP                  4       ^ ,          pVP	                  R4      '       d   VRR! p\        V4      pW$n        W@P                  V&   V'       g   K�  VP                  4       P                  4       P                  4       p\        V4      ^8”  d‘   V^,          P                  R4      '       ds   V P                  V4      pV/ 8w  d[   \        P                  ! VR,          4      Vn        VR,          Vn        RV9   d   VR,          Vn        RV9   d   VR,          Vn        V^ ,          P                  R4      '       d:   \&        P                  ! R	V^ ,          4      p	VP                  P)                  V	4       V^ ,          R
8X  d   \+        V^,          4      Vn        V^ ,          R8X  d    WUP                  R4      ^,           R Vn        V^ ,          P                  R4      '       g=   V^ ,          P                  R4      '       g   V^ ,          P                  R4      '       d^   \&        P                  ! R	V^ ,          4      p
\        V
4      ^8”  d0   V;P.                  V
^,          P                  R4      ,          un        V^ ,          R8X  dO   V^,          Vn        VP2                  P)                  V^,          4       W7^,          ,          P)                  V4       V^ ,          R8X  dA   VP2                  P)                  V^,          4       W7^,          ,          P)                  V4       V^ ,          R8X  d!   V;P4                  VR,          ,          un        V^ ,          R8X  d    WUP                  R4      ^,           R Vn        V^ ,          R8X  dL   \&        P                  ! R	V^ ,          4      p\        V4      ^8”  d   V^,          P                  R4      Vn        V^ ,          R8X  d   V^,          Vn        V^ ,          R8X  dC   V P=                  V4      p\        P                  ! V^,          4      VP>                  V^ ,          &   V^ ,          R8X  dC   V PA                  V4      p\        P                  ! V^,          4      VPB                  V^ ,          &   V^ ,          R8X  g   V^ ,          R8X  d!   V;PD                  V^,          ,          un"        V^ ,          R8X  g   EK  / Vn#        V^,          VPF                  R&   \I        ^\        V4      4       F.  pW},          R8X  g   K  W}^,           ,          VPF                  R&   K0  	  EK{  	  \K        V4      V n&        / V P                  CV PL                  C# )"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``
NÚ:zflags=r   r   r   r   zcapabilities=ú<|>r   zdescription:zoptions=Úec_capabilitiesÚ
ec_enabledÚ,ÚetherÚhwaddrzgroups::é   NNzmedia:z: r   r   r   r   zmember:z	laggport:zvlan:Úidz
interface:Úlink)Ú	Ú éÿÿÿÿ)'r   ÚlistÚ
splitlinesÚsplitÚendswithr   r   rY   ÚlowerÚstripÚlenÚ
startswithÚ_parse_flagsÚcopyÚdeepcopyr   r   r   r   ÚreÚappendÚintr   r   r   r   r   r   r   r   Ú_parse_inetr   Ú_parse_inet6r   r!   r    ÚrangeÚdictrZ   )r"   r]   ÚifindexÚ
ifs_by_macÚdevÚlineÚcurifÚtoksr   Úcapsr   Únd6_optsÚipÚis   &&            r#   ÚparseÚIfconfig.parseW   s^  € ð ˆÜ ¤Ó&ˆ
ØˆØ—O‘O×%ˆDßÙØ�A�w˜kÔ)ð
 ˜1•�ØŸ
™
› Q��à—>‘> #×&Ò&Ø! # 2˜J�EÜ˜e“n�Ø#”	Ø+.×!Ñ! %Ñ(çñ à—:‘:“<×%Ñ%Ó'×-Ñ-Ó/ˆDä�4‹y˜1Œ}  a¥×!3Ñ!3°H×!=Ò!=Ø×)Ñ)¨$Ó/�Ø˜B”;Ü $§¢¨e°G­nÓ =�C”IØ" 4�[�C”FØ ”~Ø"'¨¥,˜œØ 5Ô(Ø%*¨8¥_˜œ
Ø�A�w×!Ñ! /×2Ò2Ü—x’x ¨¨Q­Ó0�Ø—	‘	× Ñ  Ô&à�A�w˜'Ô!ä  Q¥›L�”	à�A�w˜.Ô(Ø"&§z¡z°#£¸Õ':Ð'<Ð"=�”ð �Q•×"Ñ" :×.Ò.Ø˜•7×%Ñ%Ð&7×8Ò8Ø˜•7×%Ñ% l×3Ò3äŸ(š( 6¨4°­7Ó3�Ü�w“< !Ô#Ø—K’K 7¨1¥:×#3Ñ#3°CÓ#8Õ8•Kð �A�w˜'Ô!Ø˜q�'�”Ø—‘—‘  Q¥Ô(Ø �7Õ#×*Ñ*¨3Ô/Ø�A�w˜(Ô"Ø—‘—‘  Q¥Ô(Ø �7Õ#×*Ñ*¨3Ô/à�A�w˜)Ô#Ø—
’
˜d 2�hÕ&•
à�A�w˜(Ô"Ø §¡¨DÓ!1°AÕ!5Ð!7Ð8�”	à�A�w˜%ÔÜŸ8š8 F¨D°­GÓ4�Ü�x“= 1Ô$Ø& q�k×/Ñ/°Ó4�C”Gà�A�w˜(Ô"Ø! !�W�”
à�A�w˜&Ô Ø×%Ñ% dÓ+�Ü"&§-¢-°°1µÓ"6�—‘˜˜A�‘à�A�w˜'Ô!Ø×&Ñ& tÓ,�Ü#'§=¢=°°AµÓ#7�—	‘	˜"˜Q�%Ñ ð �A�w˜)Ô# t¨A¥w°+Ô'=Ø—’˜t A�wÕ&•à�A�w˜'×!Ø�”Ø!% a¥�—‘˜‘Ü˜q¤# d£)Ö,�AØ•w ,Ö.Ø+/°Aµ­;˜Ÿ™ Ó(ô -ñy &ô@   
Ó+ˆÔØ8�$×#Ñ#Ð8 t×'7Ñ'7Ð8Ð8r&   c                ó   € V P                   # rX   )rZ   r4   s   &r#   r�   ÚIfconfig.ifs_by_macË   s   € Ø×ÑÐr&   c                ó<   <€ V ^8„  d   QhRS[ RS[S[S[3,          /# ©r)   r…   r*   ©rn   r   r^   r   )r-   r.   s   "€r#   r/   r_   Î   s$   ø€ ÷ 
ñ 
¡ð 
©©s±D¨yÕ)9ñ 
r&   c                ó¶  € R pRV^,          9   d)   \        V^,          4      p\        VP                  4      pM>\        \        \	        V^,          ^ 4      4      4      p\        V^,          : RV: 24      pRV9   d   WP                  R4      ^,           ,          pVP                  P                  R4      ^,          p\        VP                  4      RVRVRV/3# )NÚ/Ú	broadcastÚnetmaskÚ	prefixlen)	r   r^   r”   r   r{   r   Úwith_prefixlenrp   rˆ   )r"   r…   r“   rˆ   r”   r•   s   &&    r#   r|   ÚIfconfig._parse_inetÎ   s½   € Øˆ	Ø�$�q•'Œ>Ü˜t A�wÓ'ˆBÜ˜"Ÿ*™*“o‰Gäœ+¤c¨$¨q­'°1£oÓ6Ó7ˆGÜ¨$¨q¯'¨'²7Ð;Ó<ˆBà˜$ÔØŸZ™Z¨Ó4°qÕ8Õ9ˆIØ×%Ñ%×+Ñ+¨CÓ0°Õ3ˆ	ä�—‘‹Jà˜7Ø˜YØ˜Yðð
ð 	
r&   c                óz   € \        ^\        V4      4       F!  pW,          R8X  g   K  W^,           ,          u # 	  R# )r)   r•   N)r~   rt   )r"   r…   r‰   s   && r#   Ú_get_prefixlenÚIfconfig._get_prefixlenã   s-   € Ü�qœ#˜d›)Ö$ˆAØ�w˜+Ö%Ø �E•{Ò"ó %r&   c                ó<   <€ V ^8„  d   QhRS[ RS[S[S[3,          /# r�   r�   )r-   r.   s   "€r#   r/   r_   è   s(   ø€ ÷ Fñ F¡ð F©%±±T°	Õ*:ñ Fr&   c                ó^  € R pRV^,          9   da   RpV^,          P                  R4      w  r4RV9   d   VP                  R4      ^,          pMV P                  V4      p\        V: RV: 24      pMjRV^,          9   d3   \        V^,          4      pV^,          P                  R4      ^,          pM*V P                  V4      p\        V^,          : RV: 24      pV'       g   VP                  '       d   RpMV'       g   VP                  '       d   Rp\        VP                  4      RVRV/3# )NÚ%z
link-localr’   z
site-localr•   Úscope)rp   r™   r   Úis_link_localÚis_site_localr^   rˆ   )r"   r…   rž   Úip6Úrestr•   rˆ   s   &&     r#   r}   ÚIfconfig._parse_inet6è   sú   € Øˆà�$�q•'Œ>Ø ˆEØ˜Q�Ÿ™ cÓ*‰IˆCØ�dŒ{Ø ŸJ™J s›O¨AÕ.‘	à ×/Ñ/°Ó5�	Ü«#ªyÐ9Ó:‰BØ�D˜•GŒ^Ü˜t A�wÓ'ˆBØ˜Q�Ÿ™ cÓ*¨1Õ-‰Ià×+Ñ+¨DÓ1ˆIÜ¨$¨q¯'¨'²9Ð=Ó>ˆBç˜×)×)Ð)Ø ‰Eß˜2×+×+Ð+Ø ˆEä�B—E‘E“
˜[¨)°W¸eÐDÐEÐEr&   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r�   )rn   r   )r-   r.   s   "€r#   r/   r_     s   ø€ ÷ ñ ¡ð ©$ñ r&   c                ó®  € \         P                  ! R V^,          4      p/ p\        V4      ^8”  d¥   V^,          P                  R4      VR&   RVR,          9   d   RVR&   MRVR&   \        ^\        V4      4       FW  pW,          R8X  d   \	        W^,           ,          4      VR&   K-  W,          R8X  g   K<  \	        W^,           ,          4      VR&   KY  	  V# )rb   re   r   r   TFr   r   )ry   rp   rt   r~   r{   )r"   r…   r   ÚretÚts   &&   r#   rv   ÚIfconfig._parse_flags  s²   € Ü—’˜  a¥Ó)ˆØˆÜˆu‹:˜Œ>Ø  �8Ÿ>™>¨#Ó.ˆC�‰LØ�s˜7•|Ô#Ø ��D’	à!��D‘	Ü˜1œc $›iÖ(�Ø•7˜hÔ&Ü$'¨°­U­Ó$4�C˜“MØ•W Ö%Ü!$ T¨a­%¥[Ó!1�C˜“Jñ	 )ð
 ˆ
r&   )rZ   rY   N)rL   rM   rN   rO   rP   r$   r   rŠ   r�   r|   r™   r}   rv   rR   rS   rT   s   @r#   rV   rV   H   sR   ø‡ € ñòñ ƒ[÷q9ó ðq9òf ÷
ð 
ò*#÷
Fð F÷2ö r&   rV   )rw   Úloggingry   Úcollectionsr   Ú	functoolsr   Ú	ipaddressr   r   r   Útypingr   r	   r
   r   r   Ú	getLoggerrL   ÚLOGr   rV   © r&   r#   Ú<module>r±      sI   ðó Û Û 	Ý #Ý ß ?Ñ ?ß 5Õ 5à×Ò˜Ó!€÷3<ñ 3<÷lGó Gr&   