
    #g3                        S SK r S SKrS SKrS SKrS SKr S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  \R2                  " 5       rSqSr " S	 S
5      rg! \\4 a'    S SKJr  S SKJr  S SKJ
r
  S SKJr  S SKJr  S SKJr   NNf = f)    N)Parse)utils)IFUPDOWN2_CONF_PATH)ifupdownMain)DryRunManager)Statusz/run/network/.lockc                   N    \ rS rSrS rS rSS jrS rS rS r	S	 r
S
 rS rSrg)	Ifupdown2)   c                     Xl         X l        S U l        S U l        S U l        S U l        U R                  U R                  U R                  U R                  S.U l
        g )N)updownqueryreload)daemonuidargsopinterfaces_filenameinterfaces_file_iobufrun_uprun_down	run_query
run_reloadhandlers)selfr   r   s      %/usr/share/ifupdown2/ifupdown/main.py__init__Ifupdown2.__init__*   sQ    	#' %)" ++MM^^oo	
    c                     [        U5      nUR                  5         UR                  5       U l        UR	                  5       U l        g N)r   validateget_argsr   get_opr   )r   argv
args_parses      r   
parse_argvIfupdown2.parse_argv:   s7    4[
'')	##%r    Nc                    U R                   S:w  a  U R                  S:w  a  [        S5      e U R                  5         U R	                  U5        U R                   S:w  aN  [
        R                  " [        5      (       d/  [        R                  S5        [        R                  R                  $ U R                  R                  U R                   5      " U R                  5        g! [         a`  n[!        U5      (       d   S nAg[        (       a"  [        R                  S[!        U5      -   5        O[#        [!        U5      5         S nAgS nAff = f)Nr   r   z must be root to run this commandz4Another instance of this program is already running.   zmain exception: )r   r   	Exceptionread_configinitr   lockFilelockfilelogerrorr   ClientSTATUS_ALREADY_RUNNINGr   getr   strprint)r   stdin_bufferes      r   mainIfupdown2.mainA   s    77g$((a->??	IIl#ww'!%..*B*B		PQ}};;;MMdgg&tyy1    	q66 s		,s1v56 c!f 	s%   A>C" ,5C" "
E,EAEEc                    [         R                  " 5       R                  5       n[        U R                  S5      (       a  U R                  R
                  (       a+  U(       d$  [         R                  " 5       R                  5         OpU R                  R
                  (       d*  U(       a#  [         R                  " 5       R                  5         O*U(       a#  [         R                  " 5       R                  5         [        U R                  S5      (       a  U R                  R                  S :w  a  U R                  S:X  d:  [        R                  SS5      S:X  a   [        R                  S5        [        S5      eU R                  R                  S	:X  a<  U R                  (       a  Xl        g ["        R$                  R'                  5       U l        g U R                  R                  U l        g [        R                  S
S5      U l        g )Nnoactinterfacesfiler   disable_cli_interfacesfile01zYdisable_cli_interfacesfile is set so users not allowed to specify interfaces file on cli. -default_interfaces_configfilez/etc/network/interfaces)r   get_instanceis_dry_mode_onhasattrr   r=   dry_run_mode_ondry_run_mode_offr>   r   configmap_gr5   r1   r2   r,   r   r   sysstdinreadr   )r   r8   rH   s      r   r.   Ifupdown2.init_   sN    (446EEG499g&&yy**,<<>YY__**,==? &&(99; 499.//DII4L4LPT4T GGw&#(DcJcQ		 K Lm#yy''3.;;1=.141AD.+/99+C+C( (37V7P(RD$r    c                    [        [        S5       nUR                  5       nS S S 5        SW-   n[        R                  " U5      n[
        R                  " 5       nUR                  U5        [        UR                  S5      5      q
[        R                  SS5      nUS:X  a  SS0[        S'   [        R                  S	S5      nUS
:X  a?  [        U R                  S5      (       a$  U R                  R                  (       d	  S[        S	'   [        R                  SS5      nUS
:X  a
  S[        S	'   g g ! , (       d  f       GN= f)Nrz[ifupdown2]
	ifupdown2"multiple_vlan_aware_bridge_supportr@   zbridge-vlan-awareyes
no_repeatslink_master_slaverA   alldelay_admin_state_change)openr   rM   ioStringIOconfigparserRawConfigParser	read_filedictitemsrJ   r5   rG   r   rV   )r   fconfig	configStrconfigFPparser	configvals          r   r-   Ifupdown2.read_config   s    %s+qVVXF ,#f,	;;y)--/"6<<45  OO$H#N	 *=e(DK%OO$7=	tyy%((36/0OO$>D	/2K+, / ,+s   D..
D=c                    [         R                  S[        U5      -  5         UR                  n[	        UR                  5      S:X  a  S n[         R                  S5        U(       d"  UR
                  (       d  UR                  (       a  SOSn[        U R                  U[        UR                  UR                  UR                  UR                  UUR                  (       + UR                  (       + U R                  U R                  UR                   S9nUR                  (       a_  UR#                  S/UR$                  UR&                  UUR(                  UR*                  UR,                  UR.                  UR0                  S9	  g UR#                  / S	QUR$                  UR&                  UUR(                  UR*                  UR,                  UR.                  UR0                  S9	  g ! [2         a    e f = f)
N	args = %sr   creating ifupdown object ..FT)r   r   ra   forcewithdependsperfmodedryruncacheaddons_enablestatemanager_enabler>   interfacesfileiobufinterfacesfileformatr   )excludepatsprintdependencysyntaxchecktypeskipupperifaceszpre-upr   zpost-up)r1   debugr6   iflistlennocacher=   r   r   rJ   rj   rk   rl   noaddonsr   r   rr   r   rV   CLASSrs   rt   ru   rv   rw   r,   )r   r   rz   cacheargifupdown_handles        r   r   Ifupdown2.run_up   s   		+D	)*!	[[F4;;1$II34"(DLLDJJ! *$++DHSGKzzMQM]M]JN--HL

GOSWS`S`O`Y]YfYfUfPTPhPhUYUoUoVZVoVoqO }}""D6488TZZ/3/?/?373G3G/3/?/?dii373G3G	 # I  ""#>#'88TZZ/3/?/?373G3G/3/?/?dii373G3G # I  		s   EG# AG# #G/c                 \   [         R                  S[        U5      -  5         UR                  n[         R                  S5        [	        U R
                  U[        UR                  UR                  UR                  UR                  UR                  (       + UR                  (       + U R                  U R                  UR                  S9nUR                  / SQUR                   UR"                  UUR$                  UR&                  UR(                  UR*                  S9  g ! [,         a    e f = f)Nrh   ri   )r   r   ra   rj   rk   rl   rm   ro   rp   r>   rq   rr   zpre-downr   z	post-down)rs   rt   usecurrentconfigrv   )r1   ry   r6   rz   r   r   rJ   rj   rk   rl   r=   r}   r   r   rr   r   rV   r~   rs   rt   r   rv   r,   )r   r   rz   r   s       r   r   Ifupdown2.run_down   s    		+D	)*	[[FII34*$++DHS[_[e[eMQM]M]JN--HL

SWS`S`O`Y]YfYfUfPTPhPhUYUoUoVZVoVo	qO   !B!%4::v-1-=-=151E1E262G2G&*ii ! 1  		s   C;D D+c                 t   [         R                  S[        U5      -  5         UR                  nUR                  (       a  SnOfUR
                  (       a  SnORUR                  (       a  SnO>UR                  (       a  SnO*UR                  (       a  SnOUR                  (       a  SnOSnU(       d.  UR                  (       d  UR                  (       d  US:w  a  US:w  a  S	OS
nU(       dU  US:X  aO  [        R                  " S5       Vs/ s H.  n[        R                  R                  SU-  5      (       d  M,  UPM0     nn[         R                  S5        [        U R                   U["        UR$                  UR&                  UU R(                  U R*                  UR,                  UR.                  S9
nUR0                  (       a  S
Ul        UR5                  U/UR2                  UR0                  UR6                  UUR8                  UR                  UR:                  UR<                  S9	  g s  snf ! [>         a    e f = f)Nrh   zquery-checkcurrzquery-runningz	query-rawzquery-syntaxzquery-dependencyzquery-savedstater   FTz/sys/class/net/z/sys/class/net/%sri   )
r   r   ra   rk   rl   rn   r>   rq   rr   withdefaults)rs   rt   formatrv   ) r1   ry   r6   rz   	checkcurrrunningraw
syntaxhelprt   printsavedstater|   oslistdirpathisdirr   r   rJ   rk   rl   r   r   rr   r   listrV   r   r~   rs   r   rv   r,   )r   r   rz   qopr   ir   s          r   r   Ifupdown2.run_query   s   		+D	)*(	[[F~~'%!$%%(%%("(DLLDOO#&*;#;#&/#9 AE  c_4%'ZZ0A%B E%BWW]]+>+BC %B EII34*$++DHSMQM]M]JN--GOPTPhPhUYUoUoVZVoVoNRN_N_aO yy!!3%499djj&.2.>.>262F2F)-499 " FE&  		s%   C$H+ +H&6H&<C)H+ &H+ +H7c                    [         R                  S[        U5      -  5         [         R                  S5        [        U R                  U[
        U R                  UR                  UR                  UR                  S9nUR                  / SQ/ SQUR                  UR                  S UR                  UR                  UR                  UR                   S9	  g ! ["         a    e f = f)Nrh   ri   )r   r   ra   r>   rk   rl   rm   rx   r   )autoallow
ifacenamesrs   r   ru   currentlyup)r1   ry   r6   r   r   rJ   r   rk   rl   r=   r   rV   r~   rs   r   ru   r   r,   )r   r   r   s      r   r   Ifupdown2.run_reload  s    		+D	)*	II34*$++DHSPTPhPhMQM]M]JN--HL

TO ""#>#D(,

t/3/?/?484I4I/3/?/?/3/?/? # A  		s   B1C C!)r   r   r   r   r   r   r   r"   )__name__
__module____qualname____firstlineno__r   r(   r:   r.   r-   r   r   r   r   __static_attributes__ r    r   r
   r
   )   s3    
 &<%RN3<$L4+Zr    r
   )r   rK   loggingrY   r[   ifupdown2.ifupdown.argvr   ifupdown2.ifupdown.utilsr   ifupdown2.ifupdown.configr   ifupdown2.ifupdown.ifupdownmainr   ifupdown2.lib.dry_runr   ifupdown2.lib.statusr   ImportErrorModuleNotFoundErrorifupdown.argvifupdown.utilsifupdown.configifupdown.ifupdownmain
lib.statuslib.dry_run	getLoggerr1   rJ   r0   r
   r   r    r   <module>r      s|    
 
  	 *-.=<3+ { { 	() *#$32!)*s   $A ,B	B	