
    /I_                          S SK Jr  S SK7  S SKJr  S SKJs  J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   N.f = f)    )Addon)*)
moduleBaseNc                       \ rS rSrSrSSSS/S/S.0S	.rS
 r\S 5       r\S 5       r	\S 5       r
SS jrS rS rS rS rS r\\\S.rS rSS jrSrg)
bridgevlan   zKifupdown2 addon module to configure vlan attributes on a vlan
aware bridge zbridgevlan module configures vlan attributes on a vlan aware bridge. This module only understands vlan interface name with dot notations. eg br0.100. where br0 is the vlan aware bridge this config is forbridge-igmp-querier-srczCbridge igmp querier src. Must be specified under the vlan interfacez<ipv4>z$bridge-igmp-querier-src 172.16.101.1)help	validvalsexample)mhelpattrsc                 d    [         R                  " U 5        [        R                  " U /UQ70 UD6  g N)r   __init__r   )selfargskargss      )/usr/share/ifupdown2/addons/bridgevlan.pyr   bridgevlan.__init__,   s&    tD14151    c                 <    U R                   [        R                  :H  $ r   )type	ifaceTypeBRIDGE_VLAN)ifaceobjs    r   _is_bridge_vlan_device!bridgevlan._is_bridge_vlan_device0   s    }}	 5 555r   c                 n    U R                   R                  SS5      n[        U5      S:X  a
  US   US   4$ g N.      r   namesplitlenr   vlists     r   _get_bridge_n_vlanbridgevlan._get_bridge_n_vlan4   s9    ##C+u:?8U1X%%r   c                 d    U R                   R                  SS5      n[        U5      S:X  a  US   $ g r    r$   r(   s     r   _get_bridgenamebridgevlan._get_bridgename;   s/    ##C+u:?8Or   Nc                 T    U R                  U5      (       d  g U R                  U5      /$ r   )r   r-   )r   r   ifaceobjs_alls      r   get_dependent_ifacenames#bridgevlan.get_dependent_ifacenamesB   s*    **844$$X.//r   c                     U R                  U5      u  p#[        US5      nU R
                  R                  U5      (       d  g 0 n[        R                  R                  (       d  U R                  R                  U5      nU(       a  UR                  U5      nOS nUR                  S5      nU(       d#  U(       a  U R                  R                  X$5        g U(       a=  Xg:w  a8  U R                  R                  X$5        U R                  R!                  X$U5        g U R                  R!                  X$U5        g ! [         a!    U R                  SUR                  -  U5        e f = fN
   zJ%s: bridge vlan interface name does not correspond to format (eg. br0.100)r	   )r*   int	Exception	log_errorr%   cachelink_existsifupdownflagsflagsPERFMODEsysfsbridge_get_mcqv4srcgetget_attr_value_firstiproute2bridge_del_mcqv4srcbridge_set_mcqv4src)r   r   
bridgenamevlanvlanidrunning_mcqv4src
r_mcqv4srcmcqv4srcs           r   _upbridgevlan._upG   s'   	!%!8!8!BZr]F zz%%j11 ""++#zz==jI)--d3JJ001JK11*E*0MM--jAMM--j(KMM--j(K7  	NN 57?}}EFNP	s   D5 5+E c                 \    U R                  U5      u  p#[        US5      nU R                  R                  U5      (       d  g UR                  S5      nU(       a  U R                  R                  X$5        g g ! [         a*    U R                  R	                  SUR
                  -  5        e f = fr4   )r*   r6   r7   loggerwarningr%   r9   r:   rA   rB   rC   )r   r   rE   rF   rG   rJ   s         r   _downbridgevlan._downh   s    	!%!8!8!BZr]F zz%%j11 001JKMM--jA   	KK !BDLMM!R S	s   A7 74B+c                     UR                   R                  S5      u  p#U R                  R                  U5      nU(       a  UR	                  U5      $ g )Nr!   )r%   r&   r>   r?   r@   )r   r   rE   rG   rH   s        r   &_query_running_bridge_igmp_querier_src1bridgevlan._query_running_bridge_igmp_querier_srcy   sE    '}}2237::99*E#''//r   c                     UR                  S5      nU(       aY  U R                  U5      nU(       a  XC:w  a  UR                  SUS5        g UR                  SUS5        [        R                  Ul        g )Nr	   r"   r   )rA   rS   update_config_with_statusifaceStatusSUCCESSstatus)r   r   ifaceobjcurrattrvalrunning_mcqs        r   _query_checkbridgevlan._query_check   sq    //0IJEEhOK+"8661;C 	 6617A?&1&9&9#r   c                     SnU R                  U5      nUR                  S5      (       a1  U(       d*  U R                  R                  SUR                  -  5        SnU$ )NTr	   z:%s: bridge-igmp-querier-src only allowed under vlan stanzaF)r   rA   rN   errorr%   )r   r   ifaceobj_getfuncret
bvlan_intfs        r   syntax_checkbridgevlan.syntax_check   sT    00:
))*CDDZKKZ]e]j]jjkC
r   )zpre-upz	post-downquery-checkcurrc                 H    [        U R                  R                  5       5      $ )z-returns list of ops supported by this module )list_run_opskeys)r   s    r   get_opsbridgevlan.get_ops   s    DMM&&())r   c                    U R                   R                  U5      nU(       d  gUS:w  a  U R                  U5      (       dq  UR                  [        R
                  -  (       d"  UR                  [        R                  -  (       a,  U R                  US5      (       d  [        R                  Ul
        gUS:X  a
  U" XU5        gU" X5        g)a  run vlan 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-runningrf   )ri   r@   r   	link_kindifaceLinkKindBRIDGEVLANrd   rW   ERRORrY   )r   r   	operationquery_ifaceobj
extra_args
op_handlers         r   runbridgevlan.run   s      ]]&&y1
(1L1LX1V1V
 ""]%9%99X=O=OR_RdRd=d --h=="-"3"3))t~6t&r    r   )__name__
__module____qualname____firstlineno____doc___modinfor   staticmethodr   r*   r-   r1   rK   rP   rS   r]   rd   ri   rk   rw   __static_attributes__ry   r   r   r   r      s    -
 &-&ZBC	(
H2 6 6    0
LBB" 'H*'r   r   )ifupdown2.lib.addonr   ifupdown2.ifupdown.iface#ifupdown2.ifupdownaddons.modulebaser    ifupdown2.ifupdown.ifupdownflagsifupdownr;   ImportErrorModuleNotFoundError	lib.addonifupdown.ifaceifupdownaddons.modulebaseifupdown.ifupdownflagsr   ry   r   r   <module>r      sL   3)*><<e'
 e' 	() 3 423s   ) A
A