+
    ˜qgjF`  ã                   óF  € ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIHtH	t	H
t
 ^ RIHtHtHt ^ RIHt ^ RIHt ]P&                  ! ]4      tR. R	. R
RRR/t ! R R]
4      tR t]P2                  ! RRR7      R 4       tR tR tRR R lltR tR tR t R t!R t"R R lt#R# )!é    N)ÚcopyÚdeepcopy)ÚIPv4Network)ÚDictÚListÚ	TypedDict)Ú	lifecycleÚsubpÚutil)Únet_prefix_to_ipv4_mask)ÚSimpleTableÚipv4Úipv6ÚhwaddrÚ ÚupFc                   ó,   a € ] tR t^,t o V 3R ltRtV tR# )Ú	Interfacec                ój   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   # )é   r   r   r   r   )ÚboolÚstrr   Údict)ÚformatÚ__classdict__s   "€Ú3/usr/lib/python3/dist-packages/cloudinit/netinfo.pyÚ__annotate__ÚInterface.__annotate__,   s;   ø‡ ‚ Ù�Hñ á�Kñ ñ ‰t�*Ññ ñ ‰t�*Ñò	 ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r   ,   s   ø‡ ‡ „ r   r   c                ó†  € \         P                  ! V 4      p/ pV EF¡  pRV9   d
   VR,          M. pVP                  R4      R8X  d
   VR,          MRpRTR\        RV9   ;'       d    R	V9   4      R
. R. /pVP                  R. 4       EF%  pVP                  R4      R8X  d†   RV9   d)   \	        \        RVR,           24      P                  4      MRpRVP                  RR4      RVRVP                  RR4      RVP                  RR4      /p	VR
,          P                  V	4       KŸ  VR,          R8X  g   K¯  VP                  RR4      p
V
'       d/   VP                  R4      '       g   V
 RVP                  R^@4       2p
RV
RVP                  RR4      /p	VR,          P                  V	4       EK(  	  WbVR,          &   EK¤  	  V# )a  Get network device dicts from ip route and ip link info.

ipaddr_json: Output string from 'ip --json addr' command.

Returns a dict of device info keyed by network device name containing
device configuration values.

Raises json.JSONDecodeError if json could not be decoded
ÚflagsÚ	link_typeÚetherÚaddressr   r   r   ÚUPÚLOWER_UPr   r   Ú	addr_infoÚfamilyÚinetÚ	prefixlenz0.0.0.0/ÚipÚlocalÚmaskÚbcastÚ	broadcastÚscopeÚinet6Ú/Úscope6Úifname)ÚjsonÚloadsÚgetr   r   r   ÚnetmaskÚappend)Úipaddr_jsonÚipaddr_dataÚdevsÚdevr)   r,   Údev_infoÚaddrr5   Úparsed_addrr3   s   &          r   Ú_netdev_info_iproute_jsonrI   3   sÀ  € ô —*’*˜[Ó)€KØ€DäˆØ '¨3¤��G–°BˆØ$'§G¡G¨KÓ$8¸GÔ$C�#�i–.Èˆà�gØ”$�t˜u‘}×<Ð<¨°uÑ)<Ó=Ø�BØ�Bð	
ˆð —G‘G˜K¨×,ˆDØ�x‰x˜Ó! VÔ+ð # dÔ*ô œ h¨t°KÕ/@Ð.AÐ$BÓC×KÑKÔLàð ð ˜$Ÿ(™( 7¨BÓ/Ø˜DØ˜TŸX™X k°2Ó6Ø˜TŸX™X g¨rÓ2ð	�ð ˜Õ ×'Ñ'¨Ö4Ø�h• 7Ö*Ø—X‘X˜g rÓ*�÷ ˜dŸh™h y×1Ò1Ø˜4˜q §¡¨+°rÓ!:Ð ;Ð<�Bà˜"Ø˜dŸh™h w°Ó3ð�ð ˜Õ ×'Ñ'¨×4ñ7 -ð8 'ˆS��]ÔñK ðL €Kr   z22.1zqRequired by old iproute2 versions that don't support ip json output. Consider upgrading to a more recent version.)Údeprecated_versionÚextra_messagec                ó  € / pRp\        V P                  4       4       EF]  w  r4\        P                  ! RV4      pV'       d}   VP	                  R4      P                  4       P                  R4      ^ ,          pVP	                  R4      P                  R4      pR. R. R	R
R\        RV9   ;'       d    RV9   4      /W&   K¡  RV9   dg   \        P                  ! RV4      pV'       g   \        P                  RW44       Kß  W,          R,          P                  VP                  4       4       EK  RV9   dÉ   \        P                  ! RV4      pV'       g   \        P                  RW44       EKM  VP                  4       pVP                  R4      pVP                  R4      w  ršpV'       g   RpW,          R,          P                  RT	RVR,          '       d
   VR,          MR
R\        V4      RVR,          /4       EKÝ  RV9   dz   \        P                  ! RV4      pV'       g   \        P                  RW44       EK  VP	                  R4      R8X  d   VP	                  R	4      W,          R	&   EKO  R
W,          R	&   EK]  EK`  	  V# )zß
@param ipaddr_out: Output string from 'ip addr show' command.

@returns: A dict of device info keyed by network device name containing
          device configuration values.
@raise: TypeError if ipaddr_out isn't a string.
Nz.^\d+:\s(?P<dev>[^:]+):\s+<(?P<flags>\S+)>\s+.*rE   Ú@r)   Ú,r   r   r   r   r   r-   r.   r9   z?\s+inet6\s(?P<ip>\S+)(\s(peer\s\S+))?\sscope\s(?P<scope6>\S+).*z*Could not parse ip addr show: (line:%d) %sr1   zd\s+inet\s(?P<cidr4>\S+)(\smetric\s(?P<metric>\d+))?(\sbrd\s(?P<bcast>\S+))?\sscope\s(?P<scope>\S+).*Úcidr4r:   Ú32r3   r6   r5   r8   Úlinkz-\s+link/(?P<link_type>\S+)\s(?P<hwaddr>\S+).*r*   r+   )Ú	enumerateÚ
splitlinesÚreÚmatchÚgroupÚlowerÚsplitr   ÚLOGÚwarningrA   Ú	groupdictÚpopÚ	partitionr   )Ú
ipaddr_outrD   Údev_nameÚnumÚlineÚmr)   rU   rO   rG   Ú_Úprefixs   &           r   Ú_netdev_info_iproutere   i   s-  € ð €DØ€HÜ˜z×4Ñ4Ó6×7‰	ˆÜ�HŠHÐFÈÓMˆßØ—w‘w˜u“~×+Ñ+Ó-×3Ñ3°CÓ8¸Õ;ˆHØ—G‘G˜GÓ$×*Ñ*¨3Ó/ˆEà˜Ø˜Ø˜"Ø”d˜4 5™=×@Ð@¨Z¸5Ñ-@ÓAð	ˆD‹Nð ˜Œ_Ü—’ð.ð ó	ˆA÷ Ü—‘Ø@À#ôñ Ø�N˜6Õ"×)Ñ)¨!¯+©+«-×8Ø�tŒ^Ü—’ð-ð óˆA÷ Ü—‘Ø@À#ôò Ø—K‘K“MˆEØ—I‘I˜gÓ&ˆEØ#Ÿo™o¨cÓ2‰OˆD�VßØ�Ø�N˜6Õ"×)Ñ)à˜$Ø¨u°W¯~¬~˜U 7ž^À2ØÔ3°FÓ;Ø˜U 7�^ð	÷ð �tŒ^Ü—’Ø@À$óˆA÷ Ü—‘Ø@À#ôò Ø�w‰w�{Ó# wÔ.Ø+,¯7©7°8Ó+<�•˜xÔ(à+-�•˜xÔ(âñA 8ðB €Kr   c           
      ó
  € / pV P                  4        EFk  pV'       g   K  V^ ,          R9  dK   VP                  4       ^ ,          pVP                  R4      '       d   VRR pW19  d   \        \        4      W&   VP                  4       P                  4       P                  4       p\        V4      ^8”  d1   \        P                  ! RV^,          4      '       d   RVX,          R&   \        \        V4      4       EF€  pWE,          R8X  dO   WE^,           ,          P                  R4      w  rgVX,          R,          P                  R	VR
\        V4      /4       K_  WE,          R8X  d*   WE^,           ,          VX,          R,          R,          R&   K•  WE,          R8X  d   WE^,           ,          VX,          R&   K½  WE,          R8X  dw   WE^,           ,          R8X  d2   VX,          R,          P                  R	WE^,           ,          /4       EK  VX,          R,          P                  R	WE^,           ,          /4       EK@  WE,          R8X  dV   VX,          R,          R,          R	,          R,           WE^,           ,          ,           pW�V,          R,          R,          R	&   EK¢  WE,          P                  R4      '       d3   WE,          P                  R4      VX,          R,          R,          R&   EKñ  WE,          R8X  g   EK  \        P                  ! RWE^,           ,          4      p	V	'       d-   V	P!                  ^4      VX,          R,          R,          R&   EKY  WE^,           ,          VX,          R,          R,          R&   EKƒ  	  EKn  	  V# )r   Ú:Nzflags=[x\d]+<up.*>Tr   r1   r:   r   r3   r5   r7   r6   zaddress:r   r9   úaddr:r   r2   úscope:r;   Úscopeidú	.*<(\S+)>©Ú	Ú éÿÿÿÿ)rS   rX   Úendswithr   ÚDEFAULT_NETDEV_INFOrW   ÚstripÚlenrT   ÚsearchÚrangerA   r   Ú
startswithÚlstriprU   rV   )
Úifconfig_datarD   ra   ÚcurdevÚtoksÚiÚnetworkÚnet_bitsÚaddr6Úress
   &         r   Ú_netdev_info_ifconfig_netbsdr€   ¼   sž  € à€DØ×(Ñ(×*ˆßÙØ��7˜+Ô%Ø—Z‘Z“\ !•_ˆFà�‰˜s×#Ò#Ø  ˜�ØÔ!Ü'Ô(;Ó<�‘Ø�z‰z‹|×!Ñ!Ó#×)Ñ)Ó+ˆÜˆt‹9�qŒ=Ü�yŠyÐ.°°Qµ×8Ò8Ø%)��V•˜TÑ"ä”s˜4“y×!ˆAØ�w˜&Ô Ø$(¨Q­¥K×$5Ñ$5°cÓ$:Ñ!�Ø�V•˜VÕ$×+Ñ+Ø˜7 FÔ,CÀHÓ,MÐNöð •˜KÔ'Ø48¸Q½µK��V•˜VÕ$ RÕ(¨Ó1Ø•˜JÔ&Ø)-°!­e­��V•˜XÓ&Ø•˜GÔ#Ø˜A�•; 'Ô)Ø˜•L Õ(×/Ñ/°°tÀ½Eµ{Ð0C×Dà˜•L Õ(×/Ñ/°°tÀ½Eµ{Ð0C×DØ•˜KÔ'Ø˜V� VÕ,¨RÕ0°Õ6¸Õ<¸tÈÅE½{ÕJ�Ø16�V•˜VÕ$ RÕ(¨Ô.Ø•×#Ñ# H×-Ò-Ø59µW·^±^ÀHÓ5M��V•˜VÕ$ RÕ(¨Ô2Ø•˜I×%Ü—h’h˜|¨T°aµ%­[Ó9�ßØ9<¿¹À1»�D˜•L Õ(¨Õ,¨XÔ6à9=À!½e½�D˜•L Õ(¨Õ,¨XÔ6ô3 "ñ +ðT €Kr   c                 óæ  € / pV P                  4        EFY  pV'       g   K  V^ ,          R9  dK   VP                  4       ^ ,          pVP                  R4      '       d   VRR pW19  d   \        \        4      W&   VP                  4       P                  4       P                  4       pV^ ,          R8X  d   RVX,          R&   M@\        V4      ^8”  d1   \        P                  ! RV^,          4      '       d   RVX,          R&   \        \        V4      4       EFS  pWE,          R8X  d@   VX,          R,          P                  RWE^,           ,          P                  R	4      /4       KP  WE,          P                  R
4      '       d2   WE,          P                  R
4      VX,          R,          R,          R&   Kž  WE,          R8X  d*   WE^,           ,          VX,          R,          R,          R&   KÔ  WE,          P                  R4      '       d3   WE,          P                  R4      VX,          R,          R,          R&   EK#  WE,          R8X  d+   WE^,           ,          VX,          R,          R,          R&   EKZ  WE,          R8X  g   WE,          R8X  d   WE^,           ,          VX,          R&   EK�  WE,          R8X  dw   WE^,           ,          R	8X  d2   VX,          R,          P                  RWE^,           ,          /4       EKâ  VX,          R,          P                  RWE^,           ,          /4       EK  WE,          R8X  dV   VX,          R,          R,          R,          R,           WE^,           ,          ,           pWaV,          R,          R,          R&   EKu  WE,          P                  R4      '       d3   WE,          P                  R4      VX,          R,          R,          R&   EKÄ  WE,          R8X  g   EKÔ  \        P                  ! RWE^,           ,          4      pV'       d-   VP                  ^4      VX,          R,          R,          R&   EK,  WE^,           ,          VX,          R,          R,          R&   EKV  	  EK\  	  V# )r   rg   Nr   Tzflags=\d+<up,r1   r   r3   rh   zbcast:r6   r7   zmask:r5   r@   r   r+   r9   r   r2   r:   ri   r;   rj   rk   rl   ro   )rS   rX   rp   r   rq   rW   rr   rs   rT   rt   ru   rA   rw   rv   rU   rV   )rx   rD   ra   ry   rz   r{   r~   r   s   &       r   Ú_netdev_info_ifconfigr‚   ì   sD  € à€DØ×(Ñ(×*ˆßÙØ��7˜+Ô%Ø—Z‘Z“\ !•_ˆFà�‰˜s×#Ò#Ø  ˜�ØÔ!Ü'Ô(;Ó<�‘Ø�z‰z‹|×!Ñ!Ó#×)Ñ)Ó+ˆØ��7�dŒ?Ø!%ˆD��L˜Òô �‹Y˜Œ]Ü�yŠyÐ)¨4°­7×3Ò3Ø%)��V•˜TÑ"ä”s˜4“y×!ˆAØ�w˜&Ô Ø�V•˜VÕ$×+Ñ+Ø˜4 A¥�;×-Ñ-¨gÓ6Ð7öð •×#Ñ# H×-Ò-Ø48µG·N±NÀ8Ó4L��V•˜VÕ$ RÕ(¨Ó1Ø•˜KÔ'Ø48¸Q½µK��V•˜VÕ$ RÕ(¨Ó1Ø•×#Ñ# G×,Ò,Ø37µ7·>±>À'Ó3J��V•˜VÕ$ RÕ(¨Ô0Ø•˜IÔ%Ø37¸A½µ;��V•˜VÕ$ RÕ(¨Ô0Ø•˜HÔ$¨­°7Ô(:Ø)-°!­e­��V•˜XÔ&Ø•˜GÔ#Ø˜A�•; 'Ô)Ø˜•L Õ(×/Ñ/°°tÀ½Eµ{Ð0C×Dà˜•L Õ(×/Ñ/°°tÀ½Eµ{Ð0C×DØ•˜KÔ'Ø˜V� VÕ,¨RÕ0°Õ6¸Õ<¸tÈÅE½{ÕJ�Ø16�V•˜VÕ$ RÕ(¨Ô.Ø•×#Ñ# H×-Ò-Ø59µW·^±^ÀHÓ5M��V•˜VÕ$ RÕ(¨Ô2Ø•˜I×%Ü—h’h˜|¨T°aµ%­[Ó9�ßØ9<¿¹À1»�D˜•L Õ(¨Õ,¨XÔ6à9=À!½e½�D˜•L Õ(¨Õ,¨XÔ6ô= "ñ' +ðf €Kr   c                óh   € V ^8„  d   QhR\         \        \         \        \        3,          3,          /# )r   Úreturn)r   r   r   )r   s   "r   r   r   %  s*   € ÷ Sñ Sä	Œ#Œt”Cœ�NÕ#Ð
#Õ$ñSr   c                ó¬  aa€ / p\         P                  ! 4       '       d+   \        P                  ! RR.^ ^.R7      w  r#\        V4      pMž\        P                  ! R4      '       d(    \        P                  ! . R	O4      w  rC\        V4      pM[\        P                  ! R4      '       d+   \        P                  ! RR.^ ^.R7      w  r#\        V4      pM\        P                  R4       V R8X  d   V# \        \        \        3oRVV3R lloS! WR7       V#   \        P                   d)    \        P                  ! . R
O4      w  rC\        T4      p Lji ; i)aæ  return the instance's interfaces and interface data

includes, interface name, link state, hardware address, and lists of ipv4
and ipv6 addresses

example output:
{
'lo': {
    'up': True,
    'hwaddr': '',
    'ipv4': [
    {
        'bcast': '',
        'ip': '127.0.0.1',
        'mask': '255.0.0.0',
        'scope': 'host',
    }],
    'ipv6': [{'ip': '::1/128', 'scope6': 'host'}],
},
'lxdbr0': {
    'up': True
    'hwaddr': '00:16:3e:fa:84:30',
    'ipv4': [{
        'bcast': '',
        'ip': '10.161.80.1',
        'mask': '255.255.255.0',
        'scope': 'global',
    }],
    'ipv6': [
        {'ip': 'fd42:80e2:4695:1e96::1/64', 'scope6': 'global'},
        {'ip': 'fe80::216:3eff:fefa:8430/64', 'scope6': 'link'},
    ]
},
}

Úifconfigz-a©Úrcsr3   z>Could not print networks: missing 'ip' and 'ifconfig' commandsr   c                ó"  <€ \        V \        4      '       d   V P                  4       pM3\        V \        \        34      '       d   \        V 4      pM\        R4      hV F-  w  rEWR9   d   WV&   K  \        VS4      '       g   K%  S! WQ4       K/  	  R# )zIRecursively replace 'empty_vals' in data (dict, tuple, list)
with new_valzUnexpected input to fillN)Ú
isinstancer   ÚitemsÚtupleÚlistrR   Ú	TypeError)ÚdataÚnew_valÚ
empty_valsÚmyiterÚkeyÚvalÚfillÚrecurse_typess   &&&   €€r   r•   Únetdev_info.<locals>.fillg  sq   ø€ ô �dœD×!Ò!Ø—Z‘Z“\‰FÜ˜œu¤d˜m×,Ò,Ü˜t“_‰FäÐ6Ó7Ð7ã‰HˆCØÔ Ø#�S“	Ü˜C ×/Ô/Ù�SÖ"ó	 r   )r�   )r3   z--jsonrG   )r3   rG   Úshow)r   )r   r   )r   Ú	is_NetBSDr
   r€   ÚwhichrI   ÚProcessExecutionErrorre   r‚   rY   rZ   r   rŒ   r�   )ÚemptyrD   Ú	ifcfg_outÚ_errr^   r•   r–   s   &    @@r   Únetdev_inforŸ   %  s  ù€ ðN €DÜ‡~‚~×ÒÜ ŸIšI z°4Ð&8¸qÀ!¸fÔEÑˆÜ+¨IÓ6‰Ü	�Š�D×	Ò	ð	4Ü!%§¢Ò+CÓ!DÑˆZÜ,¨ZÓ8‰Dô
 
�Š�J×	Ò	ä ŸIšI z°4Ð&8¸qÀ!¸fÔEÑˆÜ$ YÓ/‰ä�‰ØLô	
ð �„{Øˆäœ5¤$Ð'€M÷#ð #ñ  	ˆÕØ€KøôG ×)Ñ)ô 	4ä!%§¢Ò+AÓ!BÑˆZÜ'¨
Ó3ŠDð	4ús   Á'%D Ä:EÅEc                óæ  € / p. VR&   . VR&   V P                  4       pRRRRRRRRRRR	R/pV EFg  p\        V4      pV'       g   K  VP                  4       pR
.pV^ ,          R8X  d   RVR&   RVR&   MjRV^ ,          9   d   V^ ,          P                  R4      w  r‰M*V^ ,          pRp	VP                  R4       \	        V	4      VR&   W…R&   \	        V	4      VR&   RVR&   \        \        V4      4       Ft  p
Wj,          R8X  d%   Wj^,           ,          VR&   VP                  ^R4       Wj,          R8X  d   Wj^,           ,          VR&   Wj,          R	8X  g   Kb  Wj^,           ,          VR	&   Kv  	  RP                  V4      VR&   VR,          P                  V4       EKj  	   \        P                  ! . RO^ ^.R7      w  r¼VP                  4       pV EF  p/ pV'       g   K  VP                  4       pV^ ,          R8X  d   RVR&   RVR&   MV^ ,          VR&   RVR&   R
VR&   \        \        V4      4       F‡  p
Wj,          R8X  d   Wj^,           ,          VR&   RVR&   Wj,          R8X  d   Wj^,           ,          VR&   Wj,          R	8X  d   Wj^,           ,          VR	&   Wj,          R8X  g   Kt  VR,          R,           VR&   K‰  	  VR,          P                  V4       EK	  	  V#   \        P                   d     T# i ; i)a8  
Get network route dicts from ip route info.

@param iproute_data: Output string from ip route command.

@returns: A dict containing ipv4 and ipv6 route entries as lists. Each
          item in the list is a route dictionary representing destination,
          gateway, flags, genmask and interface information.
r   r   Údestinationr   r)   ÚgatewayÚgenmaskÚifaceÚmetricÚUÚdefaultú0.0.0.0r:   rP   ÚHÚviaÚGrE   r‡   z::/0ÚUGú::ÚexpiresÚe)r3   z	--onelinez-6Úrouter�   ÚtableÚall)rS   r   rX   rA   r   ru   rs   ÚinsertÚjoinr
   r›   )Úiproute_dataÚroutesÚentriesÚdefault_route_entryra   Úentryrz   r)   rG   Úcidrr{   Úiproute_data6Ú_err6Úentries6s   &             r   Ú_netdev_route_info_iprouter¾   {  së  € ð €FØ€Fˆ6�NØ€Fˆ6�NØ×%Ñ%Ó'€Gà�rØ�Ø�2Ø�2Ø�Ø�"ðÐô ˆÜÐ(Ó)ˆßÙØ�z‰z‹|ˆØ�ˆØ��7�iÔØ#,ˆE�-Ñ Ø(ˆE�)Òà�d˜1•gŒ~Ø# A�wŸ}™}¨SÓ1‘��tà˜A•w�Ø�Ø—‘˜SÔ!Ü#:¸4Ó#@��iÑ Ø#'�-Ñ Ü6°tÓ<ˆE�)ÑØ(ˆE�)ÑÜ”s˜4“yÖ!ˆAØ�w˜%ÔØ#'¨A­¥;��iÑ Ø—‘˜Q Ô$Ø�w˜%ÔØ!%¨!¥e¥��g‘Ø�w˜(Ö"Ø"&¨1¥u¥+��h“ñ "ð Ÿ™ ›ˆˆg‰Øˆv�×Ñ˜e×$ñ; ð<)Ü!%§¢ÚFØ�A�ô"
Ñˆð !×+Ñ+Ó-ˆÜˆDØˆEßÙØ—:‘:“<ˆDØ�A�w˜)Ô#Ø'-��mÑ$Ø!%��g’à'+¨A¥w��mÑ$Ø#'��iÑ Ø!$��g‘Üœ3˜t›9Ö%�Ø•7˜eÔ#Ø'+°­E¥{�E˜)Ñ$Ø%)�E˜'‘NØ•7˜eÔ#Ø%)¨a­%¥[�E˜'‘NØ•7˜hÔ&Ø&*¨q­5¥k�E˜(‘OØ•7˜iÖ'Ø%*¨7¥^°cÕ%9�E˜'“Nñ &ð �6�N×!Ñ! %×(ñ- ð. €Møô7 ×%Ñ%ô Øð4 €Mð7ús   ÆK ËK0Ë/K0c                 ód  € / p. VR &   . VR&   V P                  4       pV EF  pV'       g   K  VP                  4       p\        V4      ^8  gG   V^ ,          R8X  g9   V^ ,          R8X  g+   V^ ,          R8X  g   V^ ,          R8X  g   V^ ,          R8X  d   Kv  \        V4      ^8  d4   VP                  R4       VP                  R4       V^,          V^&   RV^&   RV^ ,          R	V^,          R
V^,          RV^,          RV^,          RV^,          RV^,          RV^,          /pVR ,          P                  V4       EK  	   \        P                  ! . RO^ ^.R7      w  rgVP                  4       pV EF  pV'       g   K  VP                  4       p\        V4      ^8  gG   V^ ,          R8X  g9   V^ ,          R8X  g+   V^ ,          R8X  g   V^ ,          R8X  g   V^ ,          R8X  d   Kv  RV^ ,          R	V^,          RV^,          RV^,          RV^,          RV^,          RV^,          /pVR,          R8X  d   KÇ  VR,          P                  R4      '       d#   \        P                  ! RRVR,          4      VR&   VR,          P                  V4       EK"  	  V#   \        P                   d     T# i ; i)r   r   ÚKernelÚDestinationÚInternetÚ	Internet6ÚRoutingÚ-r¡   r¢   r£   r)   r¥   ÚrefÚuser¤   r‡   ÚProtoÚActiveÚloz/128z\/128$r   )Únetstatz-Ar9   ú--routeú	--numeric)	rS   rX   rs   rA   r
   rp   rT   Úsubr›   )	Ú
route_datar¶   r·   ra   rz   r¹   Úroute_data6r¼   r½   s	   &        r   Ú_netdev_route_info_netstatrÑ   Ó  s‹  € Ø€FØ€Fˆ6�NØ€Fˆ6�Nà×#Ñ#Ó%€GÜˆßÙØ�z‰z‹|ˆô �‹I˜ŒMØ�A�w˜(Ô"Ø�A�w˜-Ô'Ø�A�w˜*Ô$Ø�A�w˜+Ô%Ø�A�w˜)Ô#áÜˆt‹9�qŒ=Ø�K‰K˜ÔØ�K‰K˜ÔØ˜1•gˆD�‰GØˆD�‰Gà˜4 �7Ø�t˜A•wØ�t˜A•wØ�T˜!•WØ�d˜1•gØ�4˜•7Ø�4˜•7Ø�T˜!•Wð	
ˆð 	ˆv�×Ñ˜e×$ñG ðJ&)Ü#ŸyšyÚ>ÀQÈÀFô 
Ñˆð ×)Ñ)Ó+ˆÜˆDßÙØ—:‘:“<ˆDä�D“	˜A”Ø˜•7˜hÔ&Ø˜•7˜mÔ+Ø˜•7˜jÔ(Ø˜•7˜gÔ%Ø˜•7˜hÔ&áà˜t A�wØ˜4 �7Ø˜˜a�Ø˜$˜q�'Ø�t˜A•wØ�t˜A•wØ˜˜a�ðˆEð �W�~ Ô%Ùà�]Õ#×,Ñ,¨V×4Ò4Ü')§v¢vØ˜r 5¨Õ#7ó(��mÑ$ð �6�N×!Ñ! %×(ñ= ð> €MøôG ×%Ñ%ô ØðD €MðGús   Å J ÊJ/Ê.J/c                  óH  € / p \         P                  ! R 4      '       d(   \         P                   ! . RO4      w  r\        V4      p V # \         P                  ! R4      '       d,   \         P                   ! . RO^ ^.R7      w  r2\        V4      p V # \        P                  R4       V # )r3   rË   r‡   z;Could not print routes: missing 'ip' and 'netstat' commands)r3   z-or°   r�   )rË   rÌ   rÍ   z--extend)r
   rš   r¾   rÑ   rY   rZ   )r¶   Úiproute_outrž   Ú	route_outs       r   Ú
route_inforÕ   (  s�   € Ø€FÜ‡z‚z�$×Òä"ŸišiÒ(EÓFÑˆÜ+¨KÓ8ˆð €Mô 
�Š�I×	Ò	ä ŸIšIÚ;À!ÀQÀô
Ñˆô ,¨IÓ6ˆð
 €Mô 	�‰ØIô	
ð €Mr   c                  ó  € . p R p \        VR7      pV'       g   R# . ROp\        V4      p\        VP                  4       4       Fî  w  rVVP	                  R4      pV FF  pVP                  VVR,          VR,          VR,          VP	                  RV4      VR,          34       KH  	  VP	                  R	4      p	V	 F?  pVP                  VVR,          VR,          VVP	                  R
V4      VR,          34       KA  	  V'       d   KÂ  V	'       d   KÌ  VP                  WVR,          WWR,          34       Kð  	  VP                  4       p
\        \        V
P                  4       \        R7      4      p\        P                  ! RRV4      pV P                  WÊ.4       RP#                  V 4      R,           #   \         dK   pT P                  \        P                  ! RP                  \!        T4      R7      R^P4      4        Rp?LhRp?ii ; i)Ú.)rœ   Ú
r   r   r3   r5   r8   r   r   r;   ©r“   zNet device infoÚ+z Net device info failed ({error})©ÚerrorÚ!N)ÚDeviceÚUpÚAddressÚMaskÚScopez
Hw-Address)rŸ   r   Úsortedr‹   r?   Úadd_rowÚ
get_stringrs   ÚmaxrS   r   ÚcenterÚextendÚ	ExceptionrA   r   r   r´   )Úlinesrœ   ÚnetdevÚfieldsÚtblrE   r�   Ú
ipv4_addrsrG   Ú
ipv6_addrsÚnetdev_sÚmax_lenÚheaderr¯   s                 r   Únetdev_pformatró   ;  sÅ  € Ø€EØ€Eð0)Ü 5Ô)ˆ÷ ÙÚKˆÜ˜&Ó!ˆÜ §¡£Ö/‰IˆCØŸ™ &Ó)ˆJÛ"�Ø—‘àØ˜T�
Ø˜T�
Ø˜V�ØŸ™ ¨%Ó0Ø˜X�ðö	ñ #ð Ÿ™ &Ó)ˆJÛ"�Ø—‘àØ˜T�
Ø˜T�
ØØŸ™ ¨5Ó1Ø˜X�ðö	ñ #÷ ‘J¯©Ø—‘Ø˜t�* e°EÀ½>ÐJöñ7 0ð< —>‘>Ó#ˆÜ”c˜(×-Ñ-Ó/´SÔ9Ó:ˆÜ—’Ð.°°WÓ=ˆØ�‰�fÐ'Ô(Ø�9‰9�UÓ˜dÕ"Ð"øô_ ô 
Ø�‰Ü�KŠKØ2×9Ñ9ÄÀAÃÐ9ÓGØØó÷	
ñ 	
ûð
ús   †F0 Æ0HÆ;A H È Hc            
      ó*  € . p  \        4       pVP                  R 4      '       dä   . ROp\        V4      p\        VP                  R 4      4       FT  w  rE\	        V4      p VP                  VVR,          VP                  RR4      VR,          VR,          VR,          .4       KV  	  VP                  4       p\        \        VP                  4       \        R	7      4      p	\        P                  ! R
RV	4      p
V P                  W¨.4       VP                  R4      '       dì   . ROp\        V4      p\        VP                  R4      4       F\  w  rE\	        V4      pVR,          R8X  d   K    VP                  VVR,          VP                  RR4      VR,          VR,          .4       K^  	  VP                  4       p\        \        VP                  4       \        R	7      4      p	\        P                  ! RRV	4      p
V P                  W¨.4       RP'                  T 4      R,           #   \         d/   p\        P                  ! \        RT,          4        Rp?EK  Rp?ii ; i  \         d/   p\        P                  ! \        RT,          4        Rp?EKJ  Rp?ii ; i  \          dn   pT P#                  \        P                  ! RP%                  \	        T4      R7      R^P4      4       \        P                  ! \        RT,          4        Rp?ELRp?ii ; i)r   r¡   r¢   r¨   r£   r¤   r)   zRoute info formatting error: %sNrÙ   zRoute IPv4 inforÚ   r   rÊ   r­   zRoute IPv6 infozRoute info failed ({error})rÛ   rÝ   zRoute info failed: %srØ   )ÚRouterÁ   ÚGatewayÚGenmaskr   ÚFlags)rõ   rÁ   rö   r   rø   )rÕ   r?   r   rR   r   rä   ÚKeyErrorr   ÚlogexcrY   rå   rs   ræ   rS   rç   rè   ré   rA   r   r´   )rê   r¶   Ú	fields_v4Útbl_v4ÚnÚrÚroute_idr¯   Úroute_srñ   rò   Ú	fields_v6Útbl_v6s                r   Úroute_pformatr  r  s�  € Ø€EðC,Ü“ˆð �:‰:�f×ÒòˆIô ! Ó+ˆFÜ! &§*¡*¨VÓ"4Ö5‘�Ü˜q›6�ðLØ—N‘Nà$Ø˜mÕ,ØŸE™E )¨YÓ7Ø˜i�LØ˜g�JØ˜g�Jðö	ñ 6ð ×'Ñ'Ó)ˆGÜœ#˜g×0Ñ0Ó2¼Ô<Ó=ˆGÜ—[’[Ð!2°C¸ÓAˆFØ�L‰L˜&Ð*Ô+Ø�:‰:�f×ÒòˆIô ! Ó+ˆFÜ! &§*¡*¨VÓ"4Ö5‘�Ü˜q›6�Ø�W•: Ô%ÙðLØ—N‘Nà$Ø˜mÕ,ØŸE™E )¨TÓ2Ø˜g�JØ˜g�Jðöñ 6ð  ×'Ñ'Ó)ˆGÜœ#˜g×0Ñ0Ó2¼Ô<Ó=ˆGÜ—[’[Ð!2°C¸ÓAˆFØ�L‰L˜&Ð*Ô+Ø�9‰9�UÓ˜dÕ"Ð"øôG  ô LÜ—K’K¤Ð%FÈÕ%J×KÓKûðLûô:  ô LÜ—K’K¤Ð%FÈÕ%J×KÓKûðLûôy ô 6Ø�‰Ü�KŠKØ-×4Ñ4¼3¸q»6Ð4ÓBÀCÈóô	
ô
 	�Š”CÐ0°1Õ4×5Ò5ûð6úsI   „
J ÁAH"Å);IÈ"IÈ-"IÉIÉJÉ)"JÊJÊLÊ%A"LÌLc                 óp  € . p\        4       P                  4       pV '       d"   V F  pVP                  V : V: 24       K  	  MVP                  V4       \	        4       P                  4       pV '       d"   V F  pVP                  V : V: 24       K  	  MVP                  V4       R P                  V4      # )rØ   )ró   rS   rA   rè   r  r´   )rd   rê   Únetdev_linesra   Úroute_liness   &    r   Ú
debug_infor  »  s�   € Ø€EÜ!Ó#×.Ñ.Ó0€LßÛ ˆDØ�L‰L¢6ª4Ð0Ö1ò !ð 	�‰�\Ô"Ü“/×,Ñ,Ó.€KßÛˆDØ�L‰L¢6ª4Ð0Ö1ò  ð 	�‰�[Ô!Ø�9‰9�UÓÐr   )r   )z	ci-info: )$r=   ÚloggingrT   r   r   Ú	ipaddressr   Útypingr   r   r   Ú	cloudinitr	   r
   r   Úcloudinit.net.network_stater   Úcloudinit.simpletabler   Ú	getLoggerr!   rY   rq   r   rI   Údeprecate_callre   r€   r‚   rŸ   r¾   rÑ   rÕ   ró   r  r  r    r   r   Ú<module>r     sÆ   ðó Û Û 	ß Ý !ß (Ñ (ç +Ñ +Ý ?Ý -à×Ò˜Ó!€ð& ˜r 6¨2¨x¸¸TÀ5ÐIÐ ô�	ô ò3ðl ×ÒØðKôñ
Kóð
Kò\-ò`6÷rSòlUòpRòjò&4#ònF#öRr   