
    /I_                         S SK r S SKrS SKr S SK7  S SKJs  Jr  S SKJs  Jr	   " S S5      r " S S5      r\" 5       qS rg! \
\4 a    S SK7  S SKJr  S SKJr	   N:f = f)    N)*c                   H    \ rS rSrSr\S 5       r\S 5       r\S 5       rSr	g)pickling   z@class with helper methods for pickling/unpickling iface objects c                      [        US5       nU H(  n[        R                  " XC[        R                  5        M*     SSS5        g! , (       d  f       g= f! [         a    e f = f)zpickle a list of iface objects wbN)openpickledumpHIGHEST_PROTOCOL	Exception)clsfilenamelist_of_objectsfobjs        -/usr/share/ifupdown2/ifupdown/statemanager.pysavepickling.save   sP    	h%*CKK(?(?@ + &%%  		s'   A /AA 
AA A A#c                 n     [         R                  " X![         R                  5        g! [         a    e f = f)zpickle iface object N)r
   r   r   r   )r   r   r   s      r   save_objpickling.save_obj'   s-    	KK 7 78 		s   %( 4c              #      #    [        US5       n [        R                  " U5      v   M  ! [         a     O[         a    e f = fSSS5        g! , (       d  f       g= f7f)zload picked iface object rbN)r	   r
   loadEOFErrorr   )r   r   r   s      r   r   pickling.load/   sI      (D!Q!;;q>) & '%'	 "!!s:   AA+A
AAAA	A
AA N)
__name__
__module____qualname____firstlineno____doc__classmethodr   r   r   __static_attributes__r       r   r   r      s?    K    ( (r&   r   c                   v    \ rS rSrSrSrSr Sr Sr S r	S r
S	 rS
 rSS jrS rS rS rSS jrSS jrSrg)stateManager8   zstate manager for managing ifupdown iface obj state

ifupdown2 has to maitain old objects for down operation on
interfaces. ie to down or delete old configuration.

This class uses pickle to store iface objects.

z/var/tmp/network/
ifstatenewz/run/network/ifstatelockc                     SU l         SU l        [        5       U l        [        R
                  " SU R                  R                  -   5      U l        U R                  R                  S5        g)zcInitializes statemanager internal state

which includes a dictionary of last pickled iface objects
Nz	ifupdown.zstateManager init)
	state_dir
state_fileOrderedDictifaceobjdictlogging	getLogger	__class__r   loggerinfoselfs    r   __init__stateManager.__init__M   sU    
 'M''NN++), -,-r&   c                    [         R                  R                  S5      U l        SnU R                  (       d;  U R                  R                  SU R                  -  5        U R                  U l        Sn U R                  5         [        R                  R                  U R                  5      (       d   [        R                  " U R                  5        U R                  < SU R                   < 3U l        g ! [         a  nU(       a  e U R                  R                  SU< SU R                  < 35        U R                  U l         U R                  5          S nAN! [         a  n[        S[        U5      -  5      eS nAff = fS nAff = f)	Nr-   FzEstatemanager: state_dir not defined in config file, using default: %sTzstatemanager: z: using default directory: z5statemanager: unable to create required directory: %s/)ifupdownConfigconfiggetr-   r4   debug _stateManager__DEFAULT_STATE_DIR_init_makedirs_state_dirr   r5   strospathexistsstate_rundirmakedirsstate_filenamer.   )r7   used_defaultes      r   initstateManager.initY   s>   '..22;?~~KKehl  iA  iA  A  B!55DNL	b))+ ww~~d//00KK))*%)^^T5H5HI  		bKKPQSWSkSklm!55DNb--// b WZ]^_Z` `aab		bs7   4C5 5
F	?AFE
F%E<<FFF	c                     [         R                  R                  U R                  5      (       d!  [         R                  " U R                  5        g g N)rC   rD   rE   r-   rG   r6   s    r   rA   %stateManager._init_makedirs_state_dirt   s.    ww~~dnn--KK' .r&   c                 n    U R                   R                  UR                  / 5      R                  U5        g rN   )r0   
setdefaultnameappend)r7   ifaceobjs     r   save_ifaceobjstateManager.save_ifaceobjy   s)    $$X]]	  &x 0r&   Nc                     UnU(       d  U R                   n[        R                  R                  U5      (       d  g[        R                  U5       H  nU R                  U5        M     g)zcThis member function reads saved iface objects

Kwargs:
    filename (str): name of the state file
N)r.   rC   rD   rE   r   r   rU   )r7   r   pickle_filenamerT   s       r   read_saved_statestateManager.read_saved_state}   sL     #"ooOww~~o.. o6Hx( 7r&   c                 8    U R                   R                  U5      $ rN   )r0   r>   )r7   	ifacenames     r   get_ifaceobjsstateManager.get_ifaceobjs   s      $$Y//r&   c                   ^ U R                   R                  TR                  < SU< 35        U R                  R	                  TR                  5      nSU;   a  U(       d  T/U R                  TR                  '   g[        U4S jU 5       5      (       a  gUS   R                  [        R                  -  (       a2  U R                  TR                  	 T/U R                  TR                  '   gU R                  TR                     R                  T5        gSU;   a  U(       d  gTR                  [        R                  :w  a  gTR                  [        R                  -  (       a  gSnU HX  nUR!                  T5      (       a:  UR#                  U5        [%        U5      (       d  U R                  TR                  	   gUS-  nMZ     gg)zThis member function sync's new obj state to old statemanager state

Args:
    ifaceobj (object): new iface object
    op (str): ifupdown operation
z: statemanager sync state upc              3   D   >#    U  H  oR                  T5      v   M     g 7frN   )compare).0orT   s     r   	<genexpr>-stateManager.ifaceobj_sync.<locals>.<genexpr>   s     BMqyy**Ms    Nr   down   )r4   r?   rR   r0   r>   anyflagsiface_PICKLEDrS   statusifaceStatusSUCCESSlink_privflagsifaceLinkPrivFlagsLOOPBACKrb   poplen)r7   rT   opold_ifaceobjsoidxrd   s    `    r   ifaceobj_syncstateManager.ifaceobj_sync   si    	$MM2/ 	0))--hmm<2: 4<:!!(--0 BMBBB
 !#))ENN:))(--88@zD%%hmm4%%hmm4;;HEr\ +"5"55 &&);)D)DDD"99X&&!%%d+}-- --hmm<	 # r&   c           	      6    [        U R                  S5       n[        U R                  5      (       d  UR	                  S5         SSS5        gU R
                  R                  S5        [        U R                  R                  5       5       H(  nU Vs/ s H  n[        R                  X5      PM       nM*     SSS5        [        U R                  < SU R                  < 3S5      R                  5         gs  snf ! , (       d  f       NI= f! [         a    e f = f)z4saves state (ifaceobjects) to persistent state file r   r   Nzsaving state ..r;   w)r	   r.   rt   r0   truncater4   r?   listvaluesr   r   rF   state_runlockfilecloser   )r7   r   	ifaceobjsis       r   
save_statestateManager.save_state   s    
	doot,4,,--JJqM -, !!"34!%d&7&7&>&>&@!AI6?@iX&&q,i@ "B - 4,,d.D.DEsKQQS A -,  		sA   D -C;D AC;C62C;8=D 6C;;
D	D Dc                     U(       d#  [        U R                  R                  5       5      nU HN  nU R                  U5      nU(       d  M  U H+  nUS:X  a  UR	                  5         M  UR                  5         M-     MP     g )Njson)r}   r0   keysr]   	dump_jsondump_pretty)r7   
ifacenamesformatr   r   rT   s         r   r   stateManager.dump_pretty   sh    d//4467JA**1-I%V#&&(((*	 &	 r&   c                    U R                   R                  S5        U(       a_  U HX  nU R                  R                  U5      nUc  [        R
                  " SU-  S-   5      eUR                  U R                   5        MZ     g [        U R                  R                  5       5       H/  u  pEU Vs/ s H  o"R                  U R                   5      PM       nM1     g s  snf )Nzstatemanager iface state:z	ifname %sz
 not found)
r4   r?   ifacesr>   
exceptionsifaceNotFoundErrorr   r}   r0   items)r7   r   r   rT   r\   r   s         r   r   stateManager.dump   s    56;;??1-#$77:;9<>J9K L Ldkk*   )-T->->-D-D-F(G$	.78i$i8 )H8s   .$C)r0   r4   r-   r.   rN   )native)r   r    r!   r"   r#   r@   rH   rF   r   r8   rK   rA   rU   rY   r]   rx   r   r   r   r%   r   r&   r   r(   r(   8   s\     .!N"L$%*
.J6(
1)0.`+9r&   r(   c                      [        5       qg rN   )r(   statemanager_apir   r&   r   resetr      s
    #~r&   )rC   r
   r1   ifupdown2.ifupdown.ifaceifupdown2.ifupdown.exceptionsifupdownr   !ifupdown2.ifupdown.ifupdownconfigifupdownconfigr<   ImportErrorModuleNotFoundErrorifupdown.ifaceifupdown.exceptionsifupdown.ifupdownconfigr   r(   r   r   r   r&   r   <module>r      sk    
  	5*66>>( (<n9 n9`  > &o 	() 5 ,4	5s   A A A 