
    /I_&                          S SK Jr  S SKJr  S SK7  S SKJr  S SKJs  J	r	  S SK
Js  Jr   " S S\\5      rg! \\4 a&    S SKJr  S SKJr  S SK7  S SKJr  S SKJ	r	  S SKJr   N:f = f)    )Addon)Link)*)
moduleBaseNc                      \ rS rSrSrSS/ SQSS/S/S	.S
SS/SS/S/S	.SSS/SS/S/S	.SS/SS/S/S	.SS/SS/S/S	.S.S.rS r\S 5       r\S 5       r	S  r
S! rS" rS# rS$ rS% rS/S' jr\S( 5       rS) rS* r\\\S+.rS, rS/S- jrS.rg&)0tunnel   z-
ifupdown2 addon module to configure tunnels
z:create/configure GRE/IPIP/SIT and GRETAP tunnel interfacesz'type of tunnel as in 'ip link' command.)	gregretapipipsitvtiip6greipip6ip6ip6vti6Tztunnel-mode gremode)help	validvalsrequiredexamplealiaseszIP of local tunnel endpointz<ipv4>z<ipv6>ztunnel-local 192.2.0.42localzIP of remote tunnel endpointztunnel-endpoint 192.2.0.23endpointzTTL for tunnel packetsz<number>Fztunnel-ttl 64ttlz2Physical underlay device to use for tunnel packetsz<interface>ztunnel-dev eth1ztunnel-physdev)tunnel-modetunnel-localtunnel-endpoint
tunnel-ttl
tunnel-dev)mhelpattrsc                 d    [         R                  " U /UQ70 UD6  [        R                  " U 5        g N)r   __init__r   )selfargskargss      %/usr/share/ifupdown2/addons/tunnel.pyr%   tunnel.__init__L   s&    D14151t    c                 $    U R                  S5      $ )Nr   )get_attr_value_first)ifaceobjs    r)   _is_my_interfacetunnel._is_my_interfaceP   s    ,,];;r+   c                 d    UR                  5        H  u  p#U R                  U5      U:w  d  M    g   g)NTF)itemsget)attrs_presentattrs_configuredkeyvalues       r)   _has_config_changedtunnel._has_config_changedT   s2    *002JC  %. 3 r+   c                 V   UR                  [        R                  5      nUR                  [        R                  5      UR                  [        R                  5      [        UR                  [        R                  5      5      U(       a  U R                  R                  U5      S.$ SS.$ N )r   r   r   r    )	r3   r   IFLA_GRE_LINKIFLA_GRE_REMOTEIFLA_GRE_LOCALstrIFLA_GRE_TTLcache
get_ifnamer&   	info_datatunnel_link_ifindexs      r)   __get_info_data_gre_tunnel!tunnel.__get_info_data_gre_tunnel[   s    'mmD,>,>?  )}}T-A-AB%MM$*=*=>immD,=,=>?H[$**//0CD	
 	
 bd	
 	
r+   c                 V   UR                  [        R                  5      nUR                  [        R                  5      UR                  [        R                  5      [        UR                  [        R                  5      5      U(       a  U R                  R                  U5      S.$ SS.$ r;   )	r3   r   IFLA_IPTUN_LINKIFLA_IPTUN_REMOTEIFLA_IPTUN_LOCALr@   IFLA_IPTUN_TTLrB   rC   rD   s      r)   __get_info_data_iptun_tunnel#tunnel.__get_info_data_iptun_tunnele   s    'mmD,@,@A  )}}T-C-CD%MM$*?*?@immD,?,?@AH[$**//0CD	
 	
 bd	
 	
r+   c                    UR                  [        R                  5      nUR                  [        R                  5      UR                  [        R                  5      U(       a  U R
                  R                  U5      S.$ SS.$ )Nr<   )r   r   r    )r3   r   IFLA_VTI_LINKIFLA_VTI_REMOTEIFLA_VTI_LOCALrB   rC   rD   s      r)   __get_info_data_vti_tunnel!tunnel.__get_info_data_vti_tunnelo   sm    'mmD,>,>?  )}}T-A-AB%MM$*=*=>H[$**//0CD
 	
 bd
 	
r+   c                 D   U R                   U R                   U R                   U R                   U R                   U R                  U R                  U R                  U R                  U R                  S.
R                  US 5      " U R                  R                  U5      5      $ )N)
r
   r   r   	ip6gretap	ip6erspanr   r   ip6tnlr   r   c                     0 $ r$    )xs    r)   <lambda>+tunnel.get_linkinfo_attrs.<locals>.<lambda>   s    2r+   )!_tunnel__get_info_data_gre_tunnel#_tunnel__get_info_data_iptun_tunnel!_tunnel__get_info_data_vti_tunnelr3   rB   get_link_info_data)r&   ifname	link_kinds      r)   get_linkinfo_attrstunnel.get_linkinfo_attrsx   s    22555588885544772233
 #i
&' (,zz'D'DV'LN 	Nr+   c                 h   SSSSS.nUR                  S5      n0 n0 n[        UR                  5       5       H#  u  pgUR                  U5      nUc  M  XU'   XU'   M%     U R                  R	                  UR
                  5      (       d'  U R                  R                  UR
                  X55        g U R                  R                  UR
                  5      n	U R                  UR
                  U	5      n
U R                  US5        U R                  US5         U
(       a  X:w  d  U R                  X5      (       aL  U R                  R                  UR
                  5        U R                  R                  UR
                  X55        g g ! [         a$  nU R                  [!        U5      5         S nAg S nAff = f)	Nr   remoter   dev)r   r   r   r    r   r   r   )r-   listr2   rB   link_existsnameiproute2tunnel_createget_link_kindre    convert_user_config_to_ipnetworkr8   netlinklink_del	Exceptionlog_warnr@   )r&   r.   attr_mapr   r"   attrs_mappedattriproute_attrattr_valcurrent_modecurrent_attrses               r)   _up
tunnel._up   ss    $'
 ,,]; #'x~~'7"8D44T:H#-5\*&d	 #9 zz%%hmm44MM''tJ zz//>//|L--e^D--e5FG	"!59Q9QR_9g9g %%hmm4++HMM4N	 :h
  	"MM#a&!!	"s   A-F 
F1F,,F1c                 F   [         R                  R                  (       d+  U R                  R	                  UR
                  5      (       d  g  U R                  R                  UR
                  5        g ! [         a$  nU R                  [        U5      5         S nAg S nAff = fr$   )ifupdownflagsflagsPERFMODErB   rk   rl   rq   rr   rs   rt   r@   )r&   r.   r|   s      r)   _downtunnel._down   sj    ""++DJJ4J4J8==4Y4Y	"LL!!(--0 	"MM#a&!!	"s   %A2 2
B <BB Nc                 h    U R                  U5      (       d  g UR                  S5      nU(       a  U/$ g )Nr    )r/   r-   )r&   r.   ifacenames_alldevices       r)   get_dependent_ifacenamestunnel.get_dependent_ifacenames   s3    $$X....|<8Or+   c                 f    U(       a  X#:X  a  U R                  XS5        g U R                  XS5        g )Nr      )update_config_with_status)ifaceobjcurrattrnameattrvalrunning_attrvals       r)   _query_check_n_updatetunnel._query_check_n_update   s*    w9228aH228aPr+   c                 Z     [         R                  " X   5      X'   g! [         a     gf = f)z
Ideally this convertion should be done by ifupdown2 at a lower level
(after parsing /e/n/i) and should be done directly on each ifaceobj.
N)	ipnetwork	IPNetworkrs   )r&   user_config	attr_names      r)   rp   'tunnel.convert_user_config_to_ipnetwork   s/    
	%.%8%89O%PK" 		s    
**c           	      |   UR                   nU R                  R                  U5      (       d  g U R                  R                  U5      nU R	                  UR                   U5      nU(       d!  UR                  XR                  5       S5        g XES'   UR                  S5      nUS;   a  UR                  SS5        SS[        R                  4S[        R                  4SS	4 HX  u  pxUR                  U5      n	U	(       d  M  [        U5      (       a  U" U	5      n	U R                  X'XR                  U5      5        MZ     g )
Nr   )r   r   rY   )r   Nr   r   )r   N)r    N)rl   rB   rk   ro   re   &check_n_update_config_with_status_manyget_mod_attrsr-   replace_configr   r   callabler   r3   )
r&   r.   r   rc   rd   tunattrsuser_config_moderw   netlink_func
attr_values
             r)   _query_checktunnel._query_check   s   zz%%f--JJ,,V4	**8==)D??J\J\J^`bc"+#88G22##M8< "Y001	 3 34  #
D "66t<J%%)*5

 &&|:||TXGYZ%#
r+   )zpre-upz	post-downquery-checkcurrc                 H    [        U R                  R                  5       5      $ r$   )rj   _run_opskeys)r&   s    r)   get_opstunnel.get_ops  s    DMM&&())r+   c                     U R                   R                  U5      nU(       d  g US:w  a  U R                  U5      (       d  g US:X  a
  U" XU5        g U" X5        g )Nzquery-runningr   )r   r3   r/   )r&   r.   	operationquery_ifaceobj
extra_args
op_handlers         r)   run
tunnel.run  sR    ]]&&y1
'0E0Eh0O0O))t~6t&r+   r[   r$   )__name__
__module____qualname____firstlineno____doc___modinfor%   staticmethodr/   r8   r_   r`   ra   re   r}   r   r   r   rp   r   r   r   r   __static_attributes__r[   r+   r)   r   r      sB    N Di -."8 6&1 56#9 7&1 89&<  1(\!+,!7 M+_!-.,-;$
'HR < <  


N("T" Q Q%[R 'H*'r+   r   )ifupdown2.lib.addonr   ifupdown2.nlmanager.nlmanagerr   ifupdown2.ifupdown.iface#ifupdown2.ifupdownaddons.modulebaser    ifupdown2.ifupdown.ifupdownflagsifupdownr   ifupdown2.nlmanager.ipnetwork	nlmanagerr   ImportErrorModuleNotFoundError	lib.addonnlmanager.nlmanagerifupdown.ifaceifupdownaddons.modulebaseifupdown.ifupdownflagsnlmanager.ipnetworkr   r[   r+   r)   <module>r      s[   ,)2*><<55 p'UJ p' 	() 	,( 42+	,s   )8 +A&%A&