
    /I_8                     4   S SK r S SKr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	7  S SK
Js  Jr  S SKJs  Jr  S r " S S5      r\R                  " \R,                  \R.                  \R0                  5        g! \\4 a    S SK7  S SKJr  S SKJr   N[f = f)    N)partial)*c                 h    U (       a  U R                  U5        U[        R                  :X  a  [        eg N)send_signalsignalSIGINTKeyboardInterrupt)pssigframes      &/usr/share/ifupdown2/ifupdown/utils.pysignal_handler_fr       s(    	
s
fmm     c            	          \ rS rSr\R
                  " S5      r\" \R                  S5      r
SrSSSSSSSSS.rSS	S
.rSSS
.rSSS.rSSS.rSSS.r SrSrSrSrSrSrSrSrSrSrSrSrSrSrSr \RC                  S 5        S! H  r"\RF                  RI                  \%" 5       \"S"-      5      (       a  M0  S# HU  r#\RF                  RI                  \#\"-   5      (       a  \#\"-   \%" 5       \"S"-   '   M8  \RM                  S$\#\"-   < S%\"< S&35        MW     M     \'RQ                  S'S(5      r)\*S) 5       r+\,S* 5       r-\,S+ 5       r.\,S, 5       r/\,SDS- j5       r0\,S. 5       r1\,S/ 5       r2\,S0 5       r3\,SES1 j5       r4\,S2 5       r5\,S3 5       r6\*S4 5       r7\*S5 5       r8\*S6 5       r9\*S7 5       r:\*S8 5       r;\*SFS9 j5       r<\*S: 5       r=\*S; 5       r>\*S< 5       r?\*S= 5       r@\*SDS> j5       rA\*SSSSS\BR                  4S? j5       rD\*SSS\BR                  4S@ j5       rE\*SSSS\BR                  4SA j5       rF\*SSSS\BR                  4SB j5       rGSCrHg)Gutils&   ifupdownwNTF)onyes1fastoffno0slowr   r   )TFr   r   r   r   )r   r   )r   r   z/sbin/bridgez/bin/ipz/sbin/brctlz
/bin/pidofz/usr/sbin/servicez/sbin/sysctlz/sbin/modprobez/usr/bin/pstreez/bin/ssz/usr/sbin/vrrpdz/usr/sbin/ifplugdz/sbin/mstpctlz/sbin/ethtoolz/bin/systemctlz/usr/bin/dpkgzutils init command paths)bridgeipbrctlpidofservicesysctlmodprobepstreessvrrpdifplugdmstpctlethtool	systemctldpkg_cmd)z/bin/z/sbin/z	/usr/bin/z
/usr/sbin/zwarning: path z not found: z won't be usablez:.-,z    c                     SnU(       aE   UR                  U R                  5      R                  5        H  nUS-  nU[        US5      -  nM     U$ )Nr         )	translatemac_translate_tabsplitint)cls
hw_addressmacis       r   mac_str_to_intutils.mac_str_to_int   sR    ))#*?*?@FFHQhs1bz! I 
r   c                 T    U [         R                  ;   a  [         R                  U    $ U $ r   )r   _onoff_onezerovalues    r   get_onff_from_onezeroutils.get_onff_from_onezero   &    E(((''..r   c                 T    U [         R                  ;   a  [         R                  U    $ U $ r   )r   _yesno_onezeror=   s    r   get_yesno_from_onezeroutils.get_yesno_from_onezero   rA   r   c                 T    U [         R                  ;   a  [         R                  U    $ U $ r   )r   _onoff_boolr=   s    r   get_onoff_boolutils.get_onoff_bool   s&    E%%%$$U++r   c                 @    [         R                  R                  X5      $ r   )r   _string_valuesget)r>   defaults     r   get_boolean_from_stringutils.get_boolean_from_string   s    ##''77r   c                 (    [         R                  U    $ r   )r   _yesno_bool)bools    r   get_yesno_booleanutils.get_yesno_boolean   s      &&r   c                 N    [         R                  [         R                  U 5         $ r   )r   _binary_boolrN   r=   s    r   boolean_support_binaryutils.boolean_support_binary   s    !!%"?"?"FGGr   c                 $    U S:H  =(       d    U S:H  $ )Nr   r    r=   s    r   is_binary_boolutils.is_binary_bool   s    |+u|+r   c                 N   U(       au  U Hn  nUR                  U5      nU(       d  M  [        R                  U5      (       a  M9  X0;   d  M@  [        R                  X   5      n[        R	                  U5      X'   Mp     g U H#  nX0;   d  M
  [        R                  X   5      X'   M%     g r   )get_attr_value_firstr   r[   rN   rS   rW   )	attrsdict	attrslistifaceobjattrr>   rR   s         r   support_yesno_attrsutils.support_yesno_attrs   s    ! 55d;5!5!5e!<!<($<<Y_M*/*A*A$*G	 " "$&+&B&B9?&SIO "r   c                 v     [        U 5      $ ! [         a!    [        [        R                  U 5      5      s $ f = fr   )r4   	Exceptionr   rN   r=   s    r   get_int_from_boolean_and_string%utils.get_int_from_boolean_and_string   s6    	=u: 	=u44U;<<	=s   
 (88c                     U (       a)  U R                  S5      (       a  U SS  R                  5       n U (       a  U R                  5       $ U $ )Nether   )
startswithstriplower)	hwaddresss    r   strip_hwaddressutils.strip_hwaddress   s=    --g66!!"++-I$-y <9<r   c                 x     [        U[        5       [        5       U/5      n[	        X25      $ ! [         a     gf = f)zImport a named object N)
__import__globalslocalsImportErrorgetattr)r5   
modulenamenamemodules       r   
importNameutils.importName   s>    	
GIvx$HF v$$  		s   , 
99c                     [         R                  " U[         R                  [         R                  -  [         R                  -  5      n[
        R                  " U[
        R                  [
        R                  -  5        [
        R
                  " U[
        R                  [
        R                  5        g! [         a     gf = f)NFT)osopenO_CREATO_TRUNCO_WRONLYfcntlflockLOCK_EXLOCK_NBF_SETFD
FD_CLOEXECIOError)r5   lockfilefps      r   lockFileutils.lockFile   s{    	2::

#:R[[#HIBKKEMMEMM9:KKEMM5+;+;<   		s   B1B4 4
C Cc                    [         R                  " SU5      nU(       aK  UR                  5       nUS   (       a0  US   (       a&  US   [        US   S5      [        US   S5      US   4$ g [         R                  " SU5      nU(       aF  UR                  5       nUS   (       a,  US   (       a"  US   [        US   S5      [        US   S5      4$ g )Nz$^([\w]+)\[([\d]+)-([\d]+)\]([\.\w]+)      r   
      z^([\w\.]+)\[([\d]+)-([\d]+)\])rematchgroupsr4   )r5   ry   range_matchrange_groupss       r   parse_iface_rangeutils.parse_iface_range   s    
 hhEtL&--/LA<?$Q\!_b)ALOR0,q/C C  ((#BDIK*113?|A(OSa"-EQ46 6r   c                 H   / nU R                  U5      nU(       a  [        U5      S:X  a4  [        US   US   5       H  nUR                  SUS   U4-  5        M     U$ [        U5      S:X  a5  [        US   US   5       H  nUR                  SUS   XCS   4-  5        M!     U$ )Nr   r   r   z%s%dr      z%s%d%s)r   lenrangeappend)r5   ry   
ifacenamesiranger8   s        r   expand_iface_rangeutils.expand_iface_range   s    
&&t,6{avay&)4A%%fvay!n&<= 5 	 V!vay&)4A%%hAay0I&IJ 5 r   c                     SU;   d  SU;   a  gg)N[]TFrZ   )r5   ry   s     r   is_ifname_rangeutils.is_ifname_range
  s    $;#+r   c                 .    Sn[        U5      US-
  :  a  gg)z6IFNAMSIZ in include/linux/if.h is 16 so we check this r0   r   TF)r   )r5   ry   IFNAMSIZs      r   check_ifname_size_invalidutils.check_ifname_size_invalid  s     t9x!|#r   c                 N    [         R                   " U[        [        U5      5        g r   )r   r   r   )r5   r   r   s      r   #enable_subprocess_signal_forwarding)utils.enable_subprocess_signal_forwarding  s    c7#3R89r   c                 N    [         R                   " U[         R                  5        g r   )r   SIG_DFL)r5   r   s     r   $disable_subprocess_signal_forwarding*utils.disable_subprocess_signal_forwarding  s    c6>>*r   c                     [         R                  R                  (       a  SOSnU(       a(  U R                  R	                  U< SU< SU< S35        g U R                  R	                  U< SU< 35        g )Nz	DRY-RUN:  z
executing  [r   )ifupdownflagsflagsDRYRUNloggerinfo)r5   cmdstdindry_runs       r   _log_command_executils._log_command_exec!  sF    !.!4!4!;!;+JJOOWc5IJJJOO=>r   c                     [        U5      [        L a  SR                  U5      nU(       a
  U< SU< S3nU(       a  SXU4-  $ SX4-  $ )N r   r   z!cmd '%s' failed: returned %d (%s)zcmd '%s' failed: returned %d)typelistjoin)r5   r   cmd_returncode
cmd_outputr   s        r   _format_errorutils._format_error)  sP    9((3-C"E*C845 5 4s6KKKr   c                    U R                   c7  [        R                  [        R                  R                  SSS9S5      U l         SUR                  -  nUR                  [        R                  -  (       a  UR                  [        R                  -  (       d  S nUR                  (       a  UR                  S   nU< SU(       a  UR                  < SU< 3OS	< 3R                  5       nU(       a  U R                  R!                  U5        g
U R                  R#                  U5        g
UR$                  [&        R(                  -  (       aw  UR                  [        R*                  -  (       aU  U R                   (       dD  SU-  nU(       a  U R                  R!                  U5        g
U R                  R#                  U5        g
g)Naddress!vlan_aware_bridge_address_support)module_namerb   TzB%s: ignoring ip address. Assigning an IP address is not allowed onr   z enslaved interfaces. z is enslaved to r   Fz%s bridge vlan aware interfaces)r   r   rN   policymanagerpolicymanager_apiget_module_globalsry   role	ifaceRoleSLAVElink_privflagsifaceLinkPrivFlags	VRF_SLAVEupperifacesrm   r   warningr   	link_kindifaceLinkKindBRIDGEBRIDGE_VLAN_AWARE)r5   ra   syntax_checkmsgups        r   is_addr_ip_allowed_onutils.is_addr_ip_allowed_on5  si   008494Q4Q//BB )< C  5C1+-5]];MMIOO+!003E3O3OOB##))!,68x}}b2>@ABCH57  

""3'  

$  =#7#77)),>,P,PP;;3c9C

""3'  

$r   c           
      R   [         R                  R                  (       a  gSn [        R                  " UUUUU(       a  [        R
                  OSU(       a  [        R
                  OU R                  US9n	[        R                  U	[        R                  5        U(       d  U(       a)  U	R                  U(       a  UR                  5       OUS9S   nU	R                  5       n
 [        R#                  [        R                  5        U(       a  UR%                  5       OUnU
S:w  a  [        U R'                  UU
UU5      5      eU$ ! [         a1  n[        SSR                  U5      < S[!        U5      < S	35      eSnAff = f! [        R#                  [        R                  5        f = f)
z
exec's commands using subprocess Popen
    Args:
        cmd, should be shlex.split if not shell
returns: output

Note: close_fds=True is affecting performance (2~3 times slower)
r   N)envshell	close_fdsr   stdoutstderr)inputr   zcmd 'r   z
' failed ())r   r   r   
subprocessPopenPIPEDEVNULLr   r   r   r	   communicateencodewaitrf   r   strr   decoder   )r5   r   r   r   r   r   r   r   r   chr   ecmd_output_strings                r   _execute_subprocessutils._execute_subprocessZ  s@     %%
	F!!#&)(-,5;@
d<B)/1B 55b&--H^^E%,,.u^UVWX
WWYN 66v}}E3=J--/:QC--c.<.?.35 6 6 !   	Ps1vNOO	P 66v}}Es$   B=E 
E>,E99E>>F %F&c           	      L    U R                  X5        U R                  USUUUUS9$ )NT)r   r   r   r   r   )r   r   )r5   r   r   r   r   r   s         r   exec_user_commandutils.exec_user_command  s;     	c)&&s-11:.4-2.4 ' 6 	6r   c           	      t    U R                  X5        U R                  [        R                  " U5      UUUUUS9$ )Nr   r   r   r   r   )r   r   shlexr3   )r5   r   r   r   r   r   r   s          r   exec_commandutils.exec_command  sD     	c)&&u{{3'7+.1:.4-2.4 ' 6 	6r   c           	      l    U R                  SR                  U5      U5        U R                  UUUUUUS9$ )Nr   r   )r   r   r   )r5   cmdlr   r   r   r   r   s          r   exec_commandlutils.exec_commandl  sE     	chhtne4&&t+.1:.4-2.4 ' 6 	6r   rZ   )Fr   )r   )I__name__
__module____qualname____firstlineno__logging	getLoggerr   r   r~   devnullr   r   rK   rV   rQ   rG   r<   rC   
bridge_cmdip_cmd	brctl_cmd	pidof_cmdservice_cmd
sysctl_cmdmodprobe_cmd
pstree_cmdss_cmd	vrrpd_cmdifplugd_cmdmstpctl_cmdethtool_cmdsystemctl_cmddpkg_cmdr   r   pathexistsvarsdebugr   	maketransr2   classmethodr9   staticmethodr?   rD   rH   rN   rS   rW   r[   rc   rg   rp   r{   r   r   r   r   r   r   r   r   r   r   r   STDOUTr   r   r   r  __static_attributes__rZ   r   r   r   r   &   s   z*F2::s#G(,% 	N L K K N N
	 %JF#I"I)K$J&L'JF'I)K%K%K&M%H
KK*+  77>>$&v.//$D ww~~dSj))'+czsV|$RVY\R\^abc$%6 ff5   
  
  
 8 8 ' ' H H , , T T = = = = % %    ,    
   : : + + ? ? 	L 	L " "H  $"'&+#'"&#-#4#4+! +!Z .3D $Z->->6 6 #'5
(9(96 6 %)U4 ):):6 6r   r   )r~   r   r   r   r   r  r   	functoolsr   ifupdown2.ifupdown.iface ifupdown2.ifupdown.policymanagerr   r    ifupdown2.ifupdown.ifupdownflagsr   rv   ModuleNotFoundErrorifupdown.ifaceifupdown.policymanagerifupdown.ifupdownflagsr   r   r   r   r   rZ   r   r   <module>r*     s    
 	      	3*<<<< A6 A6F EMM5==%*:*: ;a 	() 3 22	3s   A; ;BB