
    /I_h9                          S SK Jr  S SK7  S SKJr  S SKJr  S SKJr  S SK	J
s  Jr  S SKrS SKrS SKrS SKr " S S\\5      rg! \\4 a&    S SKJr  S SK7  S SKJr  S SKJr  S SKJr  S SKJr   NJf = f)	    )Addon)*)utils)
moduleBase)moduleNotSupportedNc                   
   \ rS rSrSrSSS/SS.SS	S
.SSS/S	S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.r0 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S0S& jrS' rS( rS) r\\\S*.rS+ rS0S, jrS-rg%)1
batman_adv   zEifupdown2 addon module to configure B.A.T.M.A.N. advanced interfaces a=  batman_adv module configures B.A.T.M.A.N. advanced interfaces.Every B.A.T.M.A.N. advanced interface needs at least on ethernet interface to be creatable. You can specify a space separated listof interfaces by using the "batma-ifaces" paramater. If this parameteris set for an interfaces this module will do the magic.z<Interfaces to be part of this B.A.T.M.A.N. advanced instancez<interface-list>T)help	validvalsrequiredz:Interfaces to ignore when verifying configuration (regexp)F)r   r   z"B.A.T.M.A.N. distributed ARP tableenableddisabled)r   r   r   batman-attrzB.A.T.M.A.N. gateway mode)offclientserverzbatman-gw-mode client)r   r   r   exampler   zB.A.T.M.A.N. hop penaltyz<number>zB.A.T.M.A.N. multicast modezB.A.T.M.A.N. routing algo	BATMAN_IVBATMAN_V)batman-ifacesbatman-ifaces-ignore-regexzbatman-distributed-arp-tablezbatman-gw-modezbatman-hop-penaltyzbatman-multicast-modebatman-routing-algo)mhelpattrsc                    [         R                  " U 5        [        R                  " U /UQ70 UD6  [        R                  R                  S5      (       d  [        S5      eU R                  S   R                  5        HP  u  p4UR                  SS5      S:X  a  M  UR                  SS5      nSUR                  S	S
5      0U R                  U'   MR     g )Nz/usr/sbin/batctlz-module init failed: no /usr/sbin/batctl foundr   r   Fzbatman- filename-_)r   __init__r   ospathexistsr   _modinfoitemsgetreplace_batman_attrs)selfargskargslongnameentryattrs         )/usr/share/ifupdown2/addons/batman_adv.pyr!   batman_adv.__init__W   s    tT2D2E2ww~~011$%TUU#}}W5;;>OHyy-/58##Y3DdllC5(Dt$  ?    c                 2    UR                  S5      (       a  gg)Nr   TF)get_attr_value_first)r*   ifaceobjs     r0   _is_batman_devicebatman_adv._is_batman_devicef   s    ((/::r2   c                 f    UR                  S5      nU(       a  [        UR                  5       5      $ g )Nr   )r4   sortedsplit)r*   r5   batman_ifacess      r0   _get_batman_ifacesbatman_adv._get_batman_ifacesk   s,     55G=..122r2   c                 f    UR                  S5      nU(       a  [        R                  " SU-  5      $ g )Nr   z%s)r4   recompile)r*   r5   ifaces_ignore_regexs      r0   _get_batman_ifaces_ignore_regex*batman_adv._get_batman_ifaces_ignore_regexq   s/    &;;=YZ::u'::;;r2   c                 x    X R                   ;  a  [        SU-  5      eUR                  SU-  5      nU(       a  U$ g )NzH_get_batman_attr: Invalid or unsupported B.A.T.M.A.N. adv. attribute: %s	batman-%s)r)   
ValueErrorr4   )r*   r5   r/   values       r0   _get_batman_attrbatman_adv._get_batman_attrw   s@    )))hkoopp--{T/ABLr2   c                 d   U(       a  SUR                   < SU< 3nOCX R                  ;  a  [        SU-  5      eU R                  U   S   nSUR                   < SU< 3n U R                  U5      $ ! [         a  n[        SU< SU< 35      eS nAf[         a    [        S[        -  5      ef = f)N/sys/class/net//mesh/zQ_read_current_batman_attr: Invalid or unsupported B.A.T.M.A.N. adv. attribute: %sr   z_read_current_batman_attr (z) z:_read_current_batman_attr: Integer value expected, got: %s)namer)   rF   read_file_onelineIOError	ExceptionrG   )r*   r5   r/   dont_mapattr_file_pathattr_file_nameis          r0   _read_current_batman_attr$batman_adv._read_current_batman_attr   s    <DMM4PN--- "ux|"|}}!//5jAN<DMM>ZN	c)).99 	ND!LMM 	cY\aabb	cs   !A2 2
B/<B B/c                     X R                   ;  a  [        SU-  5      eU R                   U   S   nSUR                  < SU< 3n U R                  USU-  5        g ! [         a  n[        SU< SU< 35      eS nAff = f)NzH_set_batman_attr: Invalid or unsupported B.A.T.M.A.N. adv. attribute: %sr   rK   rL   z%s
z_set_batman_attr (z): )r)   rF   rM   
write_filerO   rP   )r*   r5   r/   rG   rS   rR   rT   s          r0   _set_batman_attrbatman_adv._set_batman_attr   s}    )))hkoopp++D1*=8@~V	FOONFUN; 	FD!DEE	Fs   A 
A=%A88A=c                 j   US;  a  [        SU-  5      e U R                  R                  SU< SU< SU< 35        [        R                  " SSUSX2/5        g ! [
        R                   a*  n[        S	U< SU< SU< S
UR                  < 35      eS nAf[          a  n[        SU-  5      eS nAff = f)N)adddelz/_batctl_if() called with invalid "op" value: %szRunning batctl -m z if  batctl-mifzCommand "batctl -m 
" failed: z_batctl_if: %s)rP   loggerdebugr   exec_commandl
subprocessCalledProcessErroroutput)r*   	bat_iface
mesh_ifaceopces         r0   
_batctl_ifbatman_adv._batctl_if   s    %%PSUUVV	3KK)RQ[\]4D" QR,, 	uyZ\^hjkjrjrstt 	3-122	3s$   AA B2-%BB2B--B2c                 ^   US;  a  [        SU-  5      e U R                  R                  SU-  5        [        R                  " SSU/[        R
                  S9ng ! [        R                   a"  n[        SU< SUR                  < 35      eS nAf[          a  n[        S	U-  5      eS nAff = f)
N)r   r   z@_set_routing_algo() called with invalid "routing_algo" value: %szRunning batctl ra %sr_   ra)stderrzCommand "batctl ra rb   z_set_routing_algo: %s)rP   rc   rd   rf   check_outputSTDOUTrg   rh   )r*   routing_algobatctl_outputrl   rm   s        r0   _set_routing_algobatman_adv._set_routing_algo   s    88adppqq	:KK5DE&33hl5S^h^o^opM,, 	_lTUT\T\]^^ 	:4q899	:s$   AA B,/BB,B''B,c           	         / nU R                  U5      nU R                  R                  SSR                  SSUR                  S/5      -  5        [
        R                  " SSUR                  S/S[
        R                  S9R                  nUR                  5        HN  nUR                  S5      S	   nU(       a  UR                  U5      (       a	  U(       a  M=  UR                  U5        MP     [        U5      $ )
Nzbatman: executing: %sr^   r_   r`   ra   i  @ )bufsizestdout:r   )rB   rc   infojoinrM   rf   PopenPIPEr{   	readlinesr:   matchappendr9   )r*   r5   ignoremembersiface_ignore_re	batctl_fhlineifaces           r0   _find_member_ifacesbatman_adv._find_member_ifaces   s    >>I0388XtX]]\`<a3bbc$$xx}}d&KW^isixixy  A  A	''*DJJ$Q'E?#8#8%#@#@VNNE" + wr2   Nc                     U R                  U5      (       d  g U=R                  [        R                  -  sl        U R	                  U5      nU(       a  U$ S /$ N)r6   	link_kindifaceLinkKind
BATMAN_ADVr<   )r*   r5   ifaceobjs_allr;   s       r0   get_dependent_ifacenames#batman_adv.get_dependent_ifacenames   sM    %%x00m666//:  vr2   c                 F   U R                  U5      S :X  a  [        S5      e/ nU R                  U5       HT  nU R                  R                  U5      (       d   U R                  R                  SU-  5        MC  UR                  U5        MV     [        U5      S:X  a  [        S5      eUR                  S5      nU(       a  U R                  U5        U R                  U5      nU R                  R                  UR                  5      (       al  U R                  U5      nU H'  nX2;  d  M
  U R                  UR                  US5        M)     U H'  nX6;  d  M
  U R                  UR                  US5        M)     O&U H   nU R                  UR                  US5        M"     U R                   HE  nU R                  X5      nU(       d  M  XR!                  X5      :w  d  M3  U R#                  XU5        MG     UR$                  S:X  a!  [&        R)                  UR                  S	5        g g )
Nz&could not determine batman interfacaeszbatman iface %s not presentr   z7None of the configured batman interfaces are available!r   r]   r\   manualup)r<   rP   cachelink_existsrc   warnr   lenr4   rw   rB   rM   r   rn   r)   rH   rU   rY   addr_methodnetlinklink_set_updown)	r*   r5   r;   r   ru   if_ignore_rer   r/   	value_cfgs	            r0   _upbatman_adv._up   s   ""H-5EFF ,,h7E::))511  "?%"GH  %( 8 !#VWW446KL""L1;;XF::!!8==11..9G -OOX]]E5A ! ''OOX]]E5A ' 'u= ' &&D--x>IyY*H*H(*YY%%xyA '
 8+##HMM48 ,r2   c                    [         R                  R                  (       d+  U R                  R	                  UR
                  5      (       d  g U R                  U5      nU H   nU R                  UR
                  US5        M"     g )Nr]   )ifupdownflagsflagsPERFMODEr   r   rM   r   rn   )r*   r5   r   r   s       r0   _downbatman_adv._down   sZ    ""++DJJ4J4JHMM4Z4Z**H5EOOX]]E59 r2   c                 j   U R                   R                  UR                  5      (       d  g U R                  U5      nU R	                  US5      n/ nUR                  S5      nU R                  U5      nSnU H  n	X;  d  M
  SnM     U HP  n	X;  a7  U(       a,  UR                  U	5      (       a  UR                  SU	-  5        M;  SnM?  UR                  U	5        MR     SR                  U5      n
UR                  SX5        UR                  SUS5        U R                   HL  nU R                  X5      nU R                  X5      nU(       d  M.  SnX:w  a  SnUR                  SU-  X5        MN     UR                  S	5      nU(       a-  U R                  US
SS9nSnX:w  a  SnUR                  S	X5        g g )NFr   r      z(%s)r^   r   rE   r   ru   T)rQ   )r   r   rM   r<   r   r4   rB   r   r   r~   update_config_with_statusr)   rH   rU   )r*   r5   ifaceobjcurrbatman_ifaces_cfgbatman_ifaces_realbatman_ifaces_real_taggediface_ignore_re_strr   	ifaces_okr   
ifaces_strr/   r   
value_currvalue_okru   s                   r0   _query_checkbatman_adv._query_check
  s   zz%%x}}55 33X>!55xG %'!&;;=YZ>>I 	 'E. '
 (E-#(=(=u(E(E.55v~F)00%8 ( XX89
..W..0LNacde &&D--x>I77HJ H&22K$4F
] '  446KL77>^b7cJH)224I:` r2   )zpre-upz	post-downquery-checkcurrc                 6    U R                   R                  5       $ )z-returns list of ops supported by this module )_run_opskeys)r*   s    r0   get_opsbatman_adv.get_opsL  s    }}!!$$r2   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)a  run B.A.T.M.A.N. configuration on the interface object passed as argument

Args:
    **ifaceobj** (object): iface object

    **operation** (str): any of 'pre-up', 'post-down', 'query-checkcurr',
                         'query-running'
Kwargs:
    **query_ifaceobj** (object): query check ifaceobject. This is only
        valid when op is 'query-checkcurr'. It is an object same as
        ifaceobj, but contains running attribute values and its config
        status. The modules can use it to return queried running state
        of interfaces. status is success if the running state is same
        as user required state in ifaceobj. error otherwise.
Nzquery-runningr   )r   r'   r6   )r*   r5   	operationquery_ifaceobj
extra_args
op_handlers         r0   runbatman_adv.runP  sT      ]]&&	2
(1G1G1R1R))7'r2    )F)Tr   )__name__
__module____qualname____firstlineno____doc__r%   r)   r!   r6   r<   rB   rH   rU   rY   rn   rw   r   r   r   r   r   r   r   r   __static_attributes__r   r2   r0   r	   r	      s   QK W01  U!+
 ='4!#	- 48!34# 3(\!#	# 6'4!#	& 4):6!$	$G)
0HdM
c$	F
3
: 	,9^::az 'H%(r2   r	   )ifupdown2.lib.addonr   ifupdown2.ifupdown.ifaceifupdown2.ifupdown.utilsr   #ifupdown2.ifupdownaddons.modulebaser   ifupdown2.ifupdown.exceptionsr    ifupdown2.ifupdown.ifupdownflagsifupdownr   ImportErrorModuleNotFoundError	lib.addonifupdown.ifaceifupdown.utilsifupdownaddons.modulebaseifupdown.exceptionsifupdown.ifupdownflagsloggingr?   rf   r"   r	   r   r2   r0   <module>r      sf   3)*.>@<<  	  	K(
 K( 	() 3 $4623s   &A +A32A3