Ë
    ”î~f[.  ã            	       óŒ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	 d dl
mZmZ dZdZdZdZd	d
ddd ddddœZe	eefZd„ Zd„ Zd„ Zdedefd„Zd„ Zd„ Zdedefd„Zdeddfd„Zd3d„Zd3deded efd!„Z d"„ Z!d#„ Z"d$„ Z#d%„ Z$d&„ Z%d'„ Z&d(„ Z'd)„ Z(d3d*„Z)d+„ Z*d,efd-„Z+d.edefd/„Z,de-fd0„Z. G d1„ d2ej^                  «      Z0y)4é    Né   )ÚConfigurationError)ÚNetDefinitionÚNetplanExceptionzNetworkManager.servicez+snap.network-manager.networkmanager.servicez/etc/iproute2/rt_tablesz/usr/share/iproute2/rt_tablesÚunspecÚdefaultÚmainÚlocaléý   éþ   éÿ   )r   r   r   r   r   r   r	   r
   c                  óB   — t         j                  j                  dd«      S )NÚNETPLAN_GENERATE_PATHz/usr/libexec/netplan/generate)ÚosÚenvironÚget© ó    ú+/usr/share/netplan/netplan_cli/cli/utils.pyÚget_generator_pathr   *   s   € Ü�:‰:�>‰>Ð1Ð3RÓSÐSr   c                  ób   — t        j                  dddt        gt         j                  ¬«      dk(  S )NÚ	systemctlú--quietú
is-enabled)Ústderrr   )Ú
subprocessÚcallÚNM_SNAP_SERVICE_NAMEÚDEVNULLr   r   r   Úis_nm_snap_enabledr    .   s*   € Ü�?‰?˜K¨°LÔBVÐWÔ`j×`rÑ`rÔsÐwxÑxÐxr   c                 ót   — t        j                  dg| z   t         j                  t         j                  ¬«       y )NÚnmcli©Ústdoutr   ©r   Ú
check_callr   ©Úargss    r   r"   r"   2   s)   € ô ×Ñ˜7˜) dÑ*´:×3EÑ3EÌj×N`ÑN`Öar   r(   Úreturnc                 ó8   — t        j                  dg| z   d¬«      S )Nr"   T©Útext)r   Úcheck_outputr'   s    r   Ú	nmcli_outr.   8   s   € ô ×"Ñ" G 9¨tÑ#3¸$Ô?Ð?r   c                  ó\   — 	 t        dg«       y# t        t        j                  f$ r Y yw xY w)z"Check if NetworkManager is runningÚgeneralTF)r"   ÚOSErrorr   ÚSubprocessErrorr   r   r   Ú
nm_runningr3   >   s1   € ðÜˆyˆkÔØøÜ”Z×/Ñ/Ð0ò Ùðús   ‚ �+ª+c                 óF  — t        j                  d«      }t        «       }| D ]p  }t        |d«      5 }|D ]T  }|j	                  |«      }|sŒ|j                  t        t        j                  ||j                  d«      «      «      «        n d d d «       Œr |S # 1 sw Y   Œ~xY w)Nz^interface-name=(.*)$Úré   )	ÚreÚcompileÚsetÚopenÚmatchÚupdateÚfnmatchÚfilterÚgroup)ÚpathsÚdevicesÚpatÚ
interfacesÚpathÚfÚlineÚms           r   Únm_interfacesrH   H   sœ   € Ü
�*‰*Ð,Ó
-€CÜ“€JØò ˆÜ�$˜‹_ð 	 Øò �Ø—I‘I˜d“O�Úà×%Ñ%¤c¬'¯.©.¸À!Ç'Á'È!Ã*Ó*MÓ&NÔOÙð÷	ð 	ðð Ð÷	ð 	ús   ±BÁA BÂB 	Ú	interfacec           	      ó€   — t        dddddd| g«      }|j                  «       j                  d«      }|d   }|d	k7  r|S d
S )Nz-mÚtabularz-fzGENERAL.CONNECTIONÚdeviceÚshowú
r6   z--Ú )r.   ÚstripÚsplit)rI   ÚoutputÚlinesÚ
connections       r   Únm_get_connection_for_interfacerU   V   sN   € Ü˜˜i¨Ð/CÀXÈvÐW`ÐaÓb€FØ�L‰L‹N× Ñ  Ó&€EØ�q‘€JØ# tÒ+ˆ:Ð3°Ð3r   rT   c                 óT   — 	 t        dd| g«       y # t        j                  $ r Y y w xY w)NrT   Úup)r"   r   ÚCalledProcessError)rT   s    r   Únm_bring_interface_uprY   ]   s.   € ðÜˆ|˜T :Ð.Õ/øÜ×(Ñ(ò Ùðús   ‚ ‘'¦'c                 ó^   — t        «       rt        | t        g|«      S t        | t        g|«      S ©N)r    r   r   ÚNM_SERVICE_NAME)ÚactionÚsyncs     r   Úsystemctl_network_managerr_   d   s/   € ô ÔÜ˜Ô"6Ð!7¸Ó>Ð>Ü�VœoÐ.°Ó5Ð5r   r]   Úservicesr^   c                 óœ   — t        |«      dk\  r>d| g}|s|j                  d«       |j                  |«       t        j                  |«       y y )Nr6   r   z
--no-block)ÚlenÚappendÚextendr   r&   )r]   r`   r^   Úcommands       r   r   r   l   sF   € Ü
ˆ8ƒ}˜ÒØ Ð'ˆáØ�N‰N˜<Ô(à�‰�xÔ ä×Ñ˜gÕ&ð r   c                  ó  — t        «       } t        j                  g d¢d¬«      }|j                  «       D ]Q  }|j	                  «       j                  d«      }|d   j                  «       sŒ6|d   dvsŒ>| j                  |d   «       ŒS | S )N)Ú
networkctlz
--no-pagerz--no-legendTr+   ú r   éÿÿÿÿ)Ú	unmanagedÚlinger)r9   r   r-   Ú
splitlinesrP   rQ   Ú	isnumericÚadd)rC   ÚoutrF   Úss       r   Únetworkd_interfacesrq   x   s{   € Ü“€JÜ
×
!Ñ
!Ò"MÐTXÔ
Y€CØ—‘Ó ò !ˆØ�J‰J‹L×Ñ˜sÓ#ˆØˆQ‰4�>‰>Õ  "¡Ð-DÒ DØ�N‰N˜1˜Q™4Õ ð!ð Ðr   c                  ó2   — t        j                  ddg«       y )Nrg   Úreload©r   r&   r   r   r   Únetworkctl_reloadru   ‚   s   € Ü×Ñ˜<¨Ð2Õ3r   c                 óh   — t        | «      dk\  r$t        j                  ddgt        | «      z   «       y y )Nr6   rg   Úreconfigure)rb   r   r&   Úlist)rC   s    r   Únetworkctl_reconfigurery   †   s0   € Ü
ˆ:ƒ˜!ÒÜ×Ñ˜|¨]Ð;¼dÀ:Ó>NÑNÕOð r   c                 ó>   — t        j                  ddd| g«      dk(  ryy)z4Return True if at least one matching unit is runningr   r   z	is-activer   TF)r   r   )Úunit_patterns    r   Úsystemctl_is_activer|   ‹   s"   € ä‡�˜ Y°¸\ÐJÓKÈqÒPØØr   c                 ó°   — t        j                  dd| gt         j                  t         j                  d¬«      }|j                  dkD  rd|j                  v ryy)z5Return True if output is "masked" or "masked-runtime"r   r   T©r$   r   r,   r   ÚmaskedF)r   ÚrunÚPIPEÚ
returncoder$   ©r{   Úress     r   Úsystemctl_is_maskedr…   ’   sH   € ä
�.‰.˜+ |°\ÐBÜ *§¡¼
¿¹Ø"ô$€Cð ‡~�~˜Ò˜h¨#¯*©*Ñ4ØØr   c                 ó”   — t        j                  dd| gt         j                  t         j                  d¬«      }|j                  dk7  ryy)z7Return True if returncode is other than "not-found" (4)r   r   Tr~   é   F)r   r€   r�   r‚   rƒ   s     r   Úsystemctl_is_installedrˆ   œ   s=   € ä
�.‰.˜+ |°\ÐBÜ *§¡¼
¿¹Ø"ô$€Cð ‡~�~˜ÒØØr   c                  ó2   — t        j                  g d¢«       y)zEReload systemd unit files from disk and re-calculate its dependencies)r   zdaemon-reloadz--no-ask-passwordNrt   r   r   r   Úsystemctl_daemon_reloadrŠ   ¦   s   € ä×ÑÒMÕNr   c                 ót   — t        j                  ddd| gt         j                  t         j                  ¬«       y)z8Flush all IP addresses of a given interface via iproute2ÚipÚaddrÚflushr#   Nr%   )Úifaces    r   Úip_addr_flushr�   «   s*   € ä×Ñ˜4 ¨°%Ð8Ä×ASÑASÔ\f×\nÑ\nÖor   c           	      óè  — t         j                  j                  d| «      }|rx	 t        t         j                  j                  |d«      «      5 }|j	                  «       j                  «       }|dk7  r!t        j                  d| |«       	 d d d «       y 	 d d d «       	 t         j                  j                  t         j                  j                  |dd«      «      }t         j                  j                  |«      }|S # 1 sw Y   ŒixY w# t        $ r*}t        j                  d| t        |«      «       Y d }~y d }~ww xY w# t        $ r+}t        j                  d| |t        |«      «       Y d }~y d }~ww xY w)	Nz/sys/class/netÚ	operstateÚdownz'device %s operstate is %s, not changingz$Cannot determine operstate of %s: %srL   Údriverz0Cannot replug %s: cannot read link %s/device: %s)r   rD   Újoinr:   ÚreadrP   ÚloggingÚdebugÚIOErrorÚerrorÚstrÚrealpathÚbasename)rI   Ú	only_downÚdevdirrE   ÚstateÚer”   Údriver_names           r   Úget_interface_driver_namer£   °   s'  € Ü�W‰W�\‰\Ð*¨IÓ6€FÙð	Ü”b—g‘g—l‘l 6¨;Ó7Ó8ð  ¸AØŸ™›Ÿ™Ó(�Ø˜F’?Ü—M‘MÐ"KÈYÐX]Ô^Ø÷	 ð  à"÷ ðÜ—‘×!Ñ!¤"§'¡'§,¡,¨v°xÀÓ"JÓKˆÜ—g‘g×&Ñ& vÓ.ˆð
 Ð÷! ð  ûô
 ò 	Ü�M‰MÐ@À)ÌSÐQRËVÔTÜûð	ûô ò Ü�‰ÐHÈ)ÐU[Ô]`ÐabÓ]cÔdÜûðúsN   ¤)D Á<C;Â	D ÂD ÂAD= Ã;DÄ D Ä	D:Ä D5Ä5D:Ä=	E1Å!E,Å,E1c                 ó”   — t        j                  | «      j                  t         j                  i g«      d   }|j                  dd«      S )Nr   r�   rO   )Ú	netifacesÚifaddressesr   ÚAF_LINK)rI   Úlinks     r   Úget_interface_macaddressr©   Ç   s=   € ä× Ñ  Ó+×/Ñ/´	×0AÑ0AÀBÀ4ÓHÈÑK€DØ�8‰8�F˜BÓÐr   rC   c                 óÆ   ‡— t        ‰t        «      sJ ‚‰j                  sJ ‚t        t	        ˆfd„| «      «      }t        |«      dk7  rt        j                  |«       y |d   S )Nc                 óP   •— ‰j                  | t        | «      t        | «      ¬«      S )N)Ú
iface_nameÚiface_driverÚ	iface_mac)Ú_match_interfacer£   r©   )ÚitfÚnetdefs    €r   ú<lambda>z%find_matching_iface.<locals>.<lambda>Ñ   s*   ø€  f×&=Ñ&=ØÜ2°3Ó7Ü.¨sÓ3ð '>ó '5€ r   r6   r   )Ú
isinstancer   Ú
_has_matchrx   r>   rb   r—   Úinfo)rC   r±   Úmatchess    ` r   Úfind_matching_ifacer·   Í   sg   ø€ Ü�fœmÔ,Ð,Ð,Ø×ÒÐÐä”6ó 5ð 7AóBó C€Gô ˆ7ƒ|�qÒÜ�‰�WÔØØ�1‰:Ðr   Ú
macaddressc                 ó6   — d}t        j                  || «      d uS )NzT^[a-fA-F0-9][a-fA-F0-9](:[a-fA-F0-9][a-fA-F0-9]){5}((:[a-fA-F0-9][a-fA-F0-9]){14})?$)r7   r;   )r¸   ÚMAC_PATTERNs     r   Úis_valid_macaddressr»   Ý   s   € Øh€KÜ�8‰8�K Ó,°DÐ8Ð8r   c                  óÈ  — i } t         }t        j                  j                  |«      st        }	 t        |d«      5 }|D ]]  }|j                  «       }t        |«      dk(  sŒ"|d   j                  «       sŒ6|d   | t        |d   «      <   t        |d   «      | |d   <   Œ_ 	 d d d «       | S # 1 sw Y   | S xY w# t        $ r" t        j                  d|› d�«       t        cY S w xY w)Nr5   r   r   r6   zCannot open 'z' for reading)ÚNEW_RT_TABLES_PATHr   rD   ÚexistsÚOLD_RT_TABLES_PATHr:   rQ   rb   rm   ÚintÚ	Exceptionr—   r˜   ÚRT_TABLES_DEFAULT)Úlookup_tablerD   Ú	rt_tablesrF   Ú
split_lines        r   Úroute_table_lookuprÆ   â   sä   € Ø€LÜ€Dä�7‰7�>‰>˜$ÔÜ!ˆð
!Ü�$˜‹_ð 	E 	Ø!ò E�Ø!ŸZ™Z›\�
Ü�z“? aÓ'¨J°q©M×,CÑ,CÕ,EØ7AÀ!±}�L¤ Z°¡]Ó!3Ñ4Ü25°jÀ±mÓ2D�L ¨A¡Ò/ñ	E÷	Eð Ð÷	Eð Ðûô ò !Ü�‰˜ t f¨NÐ;Ô<ä Ò ð!ús:   ¯B6 »$B)Á B)Á4*B)ÂB6 Â)B3Â.B6 Â3B6 Â6(C!Ã C!c                   ó8   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚNetplanCommandc                 óX  — || _         || _        || _        || _        d | _        d| _        d| _        d | _        i | _        d | _	        d | _
        t        j                  t        j                  d   ›d|›�|d¬«      | _        | j                  j!                  ddd¬	«       | j                  j!                  d
dt        j"                  ¬	«       |s^| j                  j%                  ddd¬«      | _        | j&                  j)                  ddd¬«      }|j+                  | j,                  ¬«       y y )NFr   rh   T)ÚprogÚdescriptionÚadd_helpz--debugÚ
store_truezEnable debug messages)r]   Úhelpz--breakpointzAvailable commandsrO   Ú
subcommand)ÚtitleÚmetavarÚdestrÎ   zShow this help message)rË   rÎ   )Úfunc)Ú
command_idrË   Úleaf_commandÚtestingÚ_argsr˜   Ú
breakpointÚcommandclassÚsubcommandsrÏ   rÓ   ÚargparseÚArgumentParserÚsysÚargvÚparserÚadd_argumentÚSUPPRESSÚadd_subparsersÚ
subparsersÚ
add_parserÚset_defaultsÚprint_usage)ÚselfrÔ   rË   ÚleafrÖ   Úp_helps         r   Ú__init__zNetplanCommand.__init__ú   s%  € Ø$ˆŒØ&ˆÔØ ˆÔØˆŒØˆŒ
ØˆŒ
ØˆŒØ ˆÔØˆÔØˆŒØˆŒ	ä×-Ñ-¼c¿h¹hÀq»kÉ:Ð3VØ:EØ7;ô=ˆŒð 	�‰× Ñ  °<Ø&=ð 	!ô 	?à�‰× Ñ  ¸Ü&.×&7Ñ&7ð 	!ô 	9áØ"Ÿk™k×8Ñ8Ð?SØACÈ,ð 9ó XˆDŒOà—_‘_×/Ñ/°Ø<TØ5Mð 0ó OˆFð ×Ñ T×%5Ñ%5ÐÕ6ð r   c                 ó   — || _         y r[   )r×   )rç   r(   s     r   r<   zNetplanCommand.update  s	   € Øˆ�
r   c                 óì   — | j                   j                  | j                  | ¬«      \  }| _        | j                  s9| j                  s,t        dt        j                  ¬«       | j                  «        y y y )N)r(   Ú	namespacezYou need to specify a command©Úfile)	rß   Úparse_known_argsr×   rÏ   rÕ   ÚprintrÝ   r   ræ   )rç   Únss     r   Ú
parse_argszNetplanCommand.parse_args  sW   € ØŸ™×5Ñ5¸4¿:¹:ÐQUÐ5ÓV‰ˆˆDŒJà�Š t×'8Ò'8ÜÐ1¼¿
¹
ÕCØ×ÑÕð (9ˆr   c                 ó  — | j                   r%| j                   j                  | j                  «       | j                  rd| j                  v r| j	                  «        | j
                  r
t        «        | j                  «        y )NrÎ   )rÙ   r<   r×   rÕ   ræ   rØ   rÓ   ©rç   s    r   Úrun_commandzNetplanCommand.run_command   sZ   € Ø×ÒØ×Ñ×$Ñ$ T§Z¡ZÔ0ð ×Ò ¨4¯:©:Ñ!5Ø×ÑÔà�?Š?ÜŒLØ�	‰	�r   c                 óž   — | j                   j                  t        j                  ¬«       t        j                  t
        j                  «       y )Nrî   )rß   Ú
print_helprÝ   r   Úexitr   ÚEX_USAGErõ   s    r   ræ   zNetplanCommand.print_usage,  s+   € Ø�‰×Ñ¤C§J¡JÐÔ/Ü�‰”—‘Õr   c                 óª  —  |«       }i | j                   |<   || j                   |   d<   || j                   |   d<   |j                  r!t        j                  j	                  dd «      sy | j
                  j                  |j                  |j                  |j                  d¬«      }|j                  |j                  |¬«       || j                   |   d<   y )NÚclassÚinstanceÚENABLE_TEST_COMMANDSF)rË   rÎ   rÌ   )rÓ   rÙ   rß   )rÚ   rÖ   r   r   r   rã   rä   rÔ   rË   rå   r€   )rç   ÚnamerÙ   rý   Úps        r   Ú_add_subparser_from_classz(NetplanCommand._add_subparser_from_class0  sÃ   € Ù“>ˆà!#ˆ×Ñ˜ÑØ*.ˆ×Ñ˜Ñ˜wÑ'Ø-5ˆ×Ñ˜Ñ˜zÑ*à×ÒÜ—:‘:—>‘>Ð"8¸$Ô?Øà�O‰O×&Ñ& x×':Ñ':Ø3;×3GÑ3GØ,4×,@Ñ,@Ø05ð 'ó 7ˆð 	
�‰˜HŸL™L°xˆÔ@Ø+,ˆ×Ñ˜Ñ˜xÒ(r   c                 ó¨   — dd l }|j                  |«      D ]:  \  }}|j                  |«      sŒt        |t        «      sŒ)| j                  ||«       Œ< y )Nr   )ÚinspectÚ
getmembersÚisclassÚ
issubclassrÈ   r  )rç   Ú
submodulesr  rÿ   Úobjs        r   Ú_import_subcommandsz"NetplanCommand._import_subcommandsB  sH   € ÛØ ×+Ñ+¨JÓ7ò 	:‰IˆD�#Ø�‰˜sÕ#¬
°3¼Õ(GØ×.Ñ.¨t°SÕ9ñ	:r   N)TF)
Ú__name__Ú
__module__Ú__qualname__rê   r<   ró   rö   ræ   r  r	  r   r   r   rÈ   rÈ   ø   s%   „ ó7ò8òò
òò-ó$:r   rÈ   )F)1rÝ   r   r—   rÛ   r   r¥   r=   r7   Úconfigmanagerr   Únetplanr   r   r\   r   r¿   r½   rÂ   ÚRuntimeErrorÚconfig_errorsr   r    r"   rx   r›   r.   r3   rH   rU   rY   r_   Úboolr   rq   ru   ry   r|   r…   rˆ   rŠ   r�   r£   r©   r·   r»   ÚdictrÆ   Ú	NamespacerÈ   r   r   r   ú<module>r     sS  ðó$ Û 	Û Û Û Û Û Û 	å .ß 3ð +€ØDÐ à.Ð Ø4Ð Ø  y°vÀGØ ¨S¸#ÈñMÐ ð $Ð%5°|ÐD€òTòyòbð@�Dð @˜Só @òòð4¨sð 4°só 4ð cð ¨dó ó6ñ	'�cð 	' Tð 	'°ó 	'òò4òPò
òòòOò
pó
ò. ð Dó ð 9 Cð 9¨Dó 9ð
˜Dó ô,N:�X×'Ñ'õ N:r   