
    /I_I                     
   S SK r  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s  Jr  S SKJs  Jr  S SKJr   " S S	\\5      rg! \\4 a2    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  S SKJr  S SKJr   NFf = f)
    N)Addon)Link)*)utils)statemanager_api)
moduleBasec                      \ rS rSrSrS/rS0 SS/ SQSS	/S
._S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Q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S*/S//S'._S0S1S2/S3/S,S4S5._S4S1S2/S6/S7._S8S9/ SQS:S;/S
._S<S=S,S,S>// S?QS@/SA._SBSCSSS*/SD/S'._SESFSSS*/SG/S'._SHSISJ/SK._SL/ SMQSN/S7.SOS2/SP/S7.SQ.ESR.r0 S\R                  _S\R                  _S\R                  _S \R                  _S\R                  _S$\R                  _S\R                  _S\R                  _SS\R                  _S0\R                  _S4\R                  _S(\R                   _S-\R                   _S8\R"                  _SB\R$                  _SE\R&                  _SH\R(                  _ST\R*                  0Er\R                  SU \R                  \\R                  \R2                  \R                  SV \R                  SW \R                  \\R                  \\R                  \\R                   \\R"                  SX \R$                  \\R&                  \\R*                  SY 0rS\R                  SZ 4S\R                  S[ 4S\R                  \4S$\R                  \4S\R                  \4S\R                  \4S(\R                   \4S-\R                   \4SB\R$                  \4SE\R&                  \4S\R                  S\ 4S \R                  S] 4S8\R"                  S^ 4SS\R                  \4S0\R                  \4S4\R                  \4ST\R*                  S_ 44rS` rSa rSb rSSd jr Se r!Sf r"Sg r#Sh r$Si r%SSj jr&Sk r'Sl r(\R$                  SB4\R&                  SE44r)Sm r*\R                  S 4\R"                  Sn44r+So r,\-Sp 5       r.Sq r/\R                  \R                  \R                  \R                  4r0Sr r1Ss r2St r3Su r4SSv jr5SSw jr6Sx r7SSy jr8\-Sz 5       r9\-S{ 5       r:S| r;SS} jr<\5\6\<\8S~.r=S r>  SS jr?Sr@gc)bond$   z4ifupdown2 addon module to configure bond interfaces 	ifenslavezbond configuration modulebond-use-carrierzbond use carrier)yesno01r   zbond-use-carrier yes)help	validvalsdefaultexamplebond-num-grat-arpr   255r   zbond-num-grat-arp 1)r   
validranger   r   bond-num-unsol-nazbond slave deviceszbond-num-unsol-na 1bond-xmit-hash-policy)
r   layer2r   zlayer3+42zlayer2+33zencap2+34zencap3+4r   zbond-xmit-hash-policy layer2bond-miimonzbond miimonzbond-miimon 0	bond-modez	bond mode)r   
balance-rrr   zactive-backupr   zbalance-xorr   	broadcastr   z802.3ad5zbalance-tlb6zbalance-albr!   zbond-mode 802.3adbond-lacp-ratezbond lacp rate)r   slowr   fastzbond-lacp-rate 0bond-min-linkszbond min linkszbond-min-links 0)r   r   r   r   zbond-ad-sys-priorityz802.3ad system priority65535zbond-ad-sys-priority 65535Tbond-ad-actor-sys-prio)r   r   r   r   
deprecatednew-attributezbond-ad-actor-sys-prio 65535zbond-ad-sys-mac-addrz802.3ad system mac addressz<mac>z&bond-ad-sys-mac-addr 00:00:00:00:00:00bond-ad-actor-system)r   r   r   r+   r,   z&bond-ad-actor-system 00:00:00:00:00:00)r   r   r   bond-lacp-bypass-allowzallow lacp bypassr   zbond-lacp-bypass-allow nobond-slaveszbond slavesz<interface-list>)zbond-slaves swp1 swp2zbond-slaves glob swp1-2zbond-slaves regex (swp[1|2)
bond-ports)r   required
multivaluer   r   aliasesbond-updelayzbond updelayzbond-updelay 100bond-downdelayzbond downdelayzbond-downdelay 100bond-primaryz8Control which slave interface is preferred active memberzbond-primary swp1)r   r   zbond primary reselect)r   alwaysr   betterr   failurezbond-primary-reselect failurezevpn-mh: system mac addresszes-sys-mac 00:00:00:00:00:42)bond-primary-reselect
es-sys-mac)mhelpattrsr;   r:   c                 (    [         R                  U    $ Nr   ifla_bond_mode_tblxs    #/usr/share/ifupdown2/addons/bond.py<lambda>bond.<lambda>   s    t'>'>q'A    c                 @    [        [        R                  " U 5      5      $ r?   intr   get_boolean_from_stringrB   s    rD   rE   rF      s    s53P3PQR3S/TrG   c                 (    [         R                  U    $ r?   r   ifla_bond_xmit_hash_policy_tblrB   s    rD   rE   rF          43V3VWX3YrG   c                 @    [        [        R                  " U 5      5      $ r?   rI   rB   s    rD   rE   rF      s    U5R5RST5U1VrG   c                 (    [         R                  U    $ r?   r   ifla_bond_primary_reselect_tblrB   s    rD   rE   rF      rO   rG   c                 (    [         R                  U    $ r?   r@   rB   s    rD   rE   rF      s    T5L5LQ5OrG   c                 (    [         R                  U    $ r?   rM   rB   s    rD   rE   rF          TMpMpqrMsrG   c                 @    [        [        R                  " U 5      5      $ r?   rI   rB   s    rD   rE   rF      s    3uGdGdefGgChrG   c                 @    [        [        R                  " U 5      5      $ r?   rI   rB   s    rD   rE   rF      s    #eFcFcdeFfBgrG   c                 @    [        [        R                  " U 5      5      $ r?   rI   rB   s    rD   rE   rF      s    CPUPmPmnoPpLqrG   c                 (    [         R                  U    $ r?   rR   rB   s    rD   rE   rF      rV   rG   c                 ,   [         R                  " U 5        [        R                  " U /UQ70 UD6  [        R                  R                  S5      (       d   [        R                  " S5        U R                  R                  U R                  [        R                   '   U R"                  S[        R                   U R                  R                  44-   U l        g ! [         a1  nU R                  R                  S[        U5      -  5         S nANS nAff = f)Nz/sys/class/net/bonding_masterszmodprobe -q bondingz,bond: error while loading bonding module: %sr6   )r   __init__r   ospathexistsr   exec_command	Exceptionloggerinfostrcacheget_ifindex'_bond_attr_ifquery_check_translate_funcr   IFLA_BOND_PRIMARY_bond_attr_set_list)selfargskargses       rD   r\   bond.__init__   s    tD14151ww~~>??Z""#89 PTzzOeOe44T5K5KL#'#;#;PTPfPfhlhrhrh~h~?  ?B  $B 	  Z  !ORUVWRX!XYYZs   C 
D"'DDc                 $    UR                  S5      $ )Nr/   )get_attr_value_firstrj   ifaceobjs     rD   get_bond_slavesbond.get_bond_slaves  s    ,,];;rG   c                 l    UR                   [        R                  -  =(       d    U R                  U5      $ r?   )	link_kindifaceLinkKindBONDrs   rq   s     rD   _is_bondbond._is_bond	  s+     !!M$6$66X$:N:Nx:XXrG   Nc                 :   U R                  U5      (       d  gU R                  UR                  U R                  U5      U5      n[        R
                  Ul        [        U5      Ul        UR                  [        R                  :w  a  [        R                  Ul	        U=R                  [        R                  -  sl        U=R                   ["        R$                  -  sl        UR'                  S5      (       a#  U=R(                  [*        R,                  -  sl        U$ )z1Returns list of interfaces dependent on ifaceobj Nr;   )ry   parse_port_listnamers   ifaceDependencyTypeMASTER_SLAVEdependency_typelist	priv_data	link_typeifaceLinkTypeLINK_NALINK_MASTERrv   rw   rx   role	ifaceRoleMASTERget_attr_valuelink_privflagsifaceLinkPrivFlagsES_BOND)rj   rr   ifacenames_all
slave_lists       rD   get_dependent_ifacenamesbond.get_dependent_ifacenames  s     }}X&&))(--*.*>*>x*H*8:
 $7#C#C !*-!6!66 - 9 98m000)))""<00##'9'A'AA#rG   c                 $    U R                  U5      $ r?   )syntax_check_updown_delay)rj   rr   ifaceobj_getfuncs      rD   syntax_checkbond.syntax_check#  s    --h77rG   c                 L    U R                   R                  UR                  5      $ r?   )re   
get_slavesr}   rq   s     rD    get_dependent_ifacenames_running%bond.get_dependent_ifacenames_running&  s    zz$$X]]33rG   c                     UR                   (       a  UR                   $ U R                  U5      nU(       a  U R                  UR                  U5      $ g)z.Returns slave list present in ifaceobj config N)r   rs   r|   r}   )rj   rr   slavess      rD   _get_slave_listbond._get_slave_list)  sF     %%%%%h/''v>>rG   c                 :    [         R                  " U5      =(       d    /  H<  nUR                  [        R                  -  (       d  M'  U R                  SU-  S5          g   g! [         a.  nU R                  R                  [        U5      5         SnAgSnAff = f)zX
If the intf was previously enslaved to a bridge it is possible ipv6 is still disabled.
z'/proc/sys/net/ipv6/conf/%s/disable_ipv6r   N)
statemanagerget_ifaceobjsr   r   BRIDGE_PORT
write_filera   rb   rc   rd   )rj   ifnamerr   rm   s       rD   enable_ipv6_if_prev_brportbond.enable_ipv6_if_prev_brport5  s    	%(66v>D"D**-?-K-KKKOO$MPV$VX[\ E  	%KKSV$$	%s$   AA" A" A" "
B,$BBc                 n    U R                  U5      (       a  UR                  S5      nU(       a  US:w  a  gg)Nzclag-idr   TF)rs   rp   )rj   rr   attrvals      rD   _is_clag_bondbond._is_clag_bondA  s2    ))33I>G7c>rG   c           	         U R                  U5      nU(       d)  U R                  R                  SUR                  -  5        g U R	                  U5      n/ nU H"  nXr;  d  M
  Xv;  d  M  UR                  U5        M$     U GH  n[        R                  R                  (       dE  U R                  R                  U5      (       d%  U R                  UR                  < SU< S3USS9  Mh  Sn	U R                  R                  U5      (       a  U R                  R                  U5        Sn	U(       d"  UR                  [         R"                  -  (       a   U R                  R%                  U5        U R-                  U5        U R                  R/                  XR                  5        U	(       d!  UR0                  [2        R4                  :w  d  GMJ   U" U5      S   R                  [         R6                  -  (       a  U R                  R                  U5        GM  U R                  R9                  U5        GM     U(       a  U H  nXt;  aM  U R:                  R=                  UR                  U5        U(       a   U R                  R?                  U5        MS  MU   U R                  R                  U5      n	U" U5      S   R                  [         R6                  -  nU(       a$  U	(       a  U R                  R                  U5        M  U(       d&  U	(       d  U R                  RA                  U5        M  M  M     g g ! [&         a@  n
U R                  R)                  UR                  < S[+        U
5      < 35         S n
A
GNS n
A
ff = f! [&         aA  n
U R                  R                  UR                  < S[+        U
5      < 35         S n
A
GME  S n
A
ff = f! [&         aA  n
U R                  R)                  UR                  < S[+        U
5      < 35         S n
A
GM  S n
A
ff = f! [&         aA  n
U R                  RC                  UR                  < S[+        U
5      < 35         S n
A
GM$  S n
A
ff = f)	Nz%s: no slaves foundz: skipping slave z, does not existF)raise_errorT: r   )"r   rb   debugr}   r   appendifupdownflagsflagsPERFMODEre   link_exists	log_error
link_is_upnetlinklink_down_forcer   r   r   link_set_protodown_onra   errorrd   r   link_set_masterr   r   r   KEEP_LINK_DOWNlink_upsysfsbond_remove_slavelink_set_protodown_offlink_up_forcewarning)rj   rr   runningslavesr   r   	clag_bonddevices_to_enslavesslaver   rm   config_link_downs               rD   _add_slavesbond._add_slavesH  sN   %%h/KK3X]]BC&&x0	  A%!*E"))!,  (E!''00JJ**511NN%-]]E$;<D16 # 8 Gzz$$U++,,U3 H336H6P6PPJLL66u= ++E2LL((> (,,0E0EE(/2AA*99:44U;,,U3= (F "?JJ00B R LL??B !	P"&**"7"7":,<Q,?,B,Q,Q,>,M,M-N(, LL88;"27 LL66q9 <C"2! # % ! JKK%%(--Q&HIIJ   KK%%(--Q&HI  ) R KK--(--Q.PQQR % P++s1v,NOOPsn   L1
AM>M>2OA*P>)P1
M;;5M66M;>
O	5OO	
P5PP
Q%$5Q  Q%c                     [         R                  Ul        U R                  R	                  UR
                  < SU< SU< S35        g)Nz: unable to set  z# as MII link monitoring is disabledF)ifaceStatusERRORstatusrb   r   r}   )rj   rr   	attr_namevalues       rD   _check_updown_delay_logbond._check_updown_delay_log  s8    %++(0y%I 	J rG   c           	      ,   SnUR                  S5      nUR                  S5      nU(       d  U(       d  g [        UR                  S5      5      nU(       dT  U(       a#  [        U5      (       a  U R                  USU5      nU(       a#  [        U5      (       a  U R                  USU5      nU$ ! [         a]     [        [        R                  R                  U R                  R                  UR                  SS95      n N! [         a    Sn  Nf = ff = f)NTr4   r5   r   module_namer   attrr   )
rp   rJ   ra   policymanagerpolicymanager_apiget_iface_default	__class____name__r}   r   )rj   rr   resultupdelay	downdelaymiimons         rD   r   bond.syntax_check_updown_delay  s    33NC334DE	y		66}EFF 3w<<55hPWXS^^55h@PR[\!  	]<<NN $ 7 7#==& O ( )  	s*   B, ,
D7AC??DDDDc                 V   UR                  [        R                  5      nU(       a7  Uc4  U R                  R	                  UR
                  [        R                  5      nUS:X  aF  U R                   H5  u  pVUR                  U5      nUc  M  US:  a  U R                  X&U5        X5	 M7     gg)a  
IFLA_BOND_MIIMON
Specifies the time, in milliseconds, to wait before enabling a slave
after a link recovery has been detected. This option is only valid
for the miimon link monitor. The updelay value should be a multiple
of the miimon value; if not, it will be rounded down to the nearest
multiple. The default value is 0.

This ifla_bond_miimon code should be move to get_ifla_bond_attr_from_user_config
but we need to know if the operation was successful to update the cache accordingly
r   TF)getr   IFLA_BOND_MIIMONre   get_link_info_data_attributer}   _bond_updown_delay_nl_listr   )rj   r   rr   ifla_info_dataifla_bond_miimonnl_attrr   delays           rD   check_updown_delay_nlbond.check_updown_delay_nl  s     *--d.C.CD+3#zzFFx}}VZVkVklq &*&E&E"&**73$qy44X%P&/ 'F rG   zbond-lacp-bypassc                 @   UR                  [        R                  5      nUcC  U(       a<  U R                  R	                  U[        R                  5      nXC[        R                  '   US:X  ar  UR                  [        R
                  5      nUc*  U R                  R	                  U[        R
                  5      nUS:X  a  U R                  R                  SU-  5        g g U R                   H1  u  pgXc;   d  M  U R                  R                  U< SU< S35        X6	 M3     g )N   r   z*%s: attribute bond-min-links is set to '0': ignoring z%: only available for 802.3ad mode (4))
r   r   IFLA_BOND_MODEre   r   IFLA_BOND_MIN_LINKSrb   r   _bond_lacp_attrsrc   )rj   r   r   r   ifla_bond_mode	min_linksr   r   s           rD   _check_bond_mode_user_config!bond._check_bond_mode_user_config  s    '++D,?,?@!k!ZZDDVTM`M`aN 3A4../Q&**4+C+CDI  JJCCFDLdLde	A~##$RU[$[\  '+&;&;",KK$$_egp%qr&/ '<rG   c                 V    U (       a"  [         R                  " U5      nU(       a  US   $ g )Nr   )r   r   )r   r   
old_configs      rD   get_saved_ifaceobjbond.get_saved_ifaceobj  s%    %33F;J!!}$rG   c                    UR                   n[        5       nU R                  X#5      nU R                   GH  u  pgnSn	UR	                  U5      n
U
(       da  [
        R                  R                  U R                  R                  UUS9n
U
(       a'  U R                  R                  U< SU< SU
< S35        U
(       d[  U(       aT  UR	                  U5      (       a>  U R                  U5      n
U
(       a&  U R                  R                  U< SU< SU
< 35        U
(       d  M   U" U
R                  5       5      nU(       a  U R                  R                  X75      n	U(       a-  U	c*  U R                  R                  U< SU< SU
< S35        GMZ  U(       a  X:X  a  GMi  XU'   U	b.  U R                  R!                  U< S	U< SU
< S
U	< S35        GM  U R                  R!                  U< S	U< SU
< 35        GM     U R'                  X2U5        U$ ! ["         a+    U R                  R%                  U< SU< SU
< 35         GM  f = f)a  
Potential issue: if a user load the bond driver with custom
default values (say bond-mode 3), ifupdown2 has no knowledge
of these default values.
At bond creation everything should work, bonds will be created
with mode 3 (even if not specified under the stanza).
But, for example: if the user specifies a value under bond-mode
and later on the user removes the bond-mode line from the stanza
we will detect it and reset to MODINFO: BOND-MODE: DEFAULT aka 0
which is not the real default value that the user may expect.
Nr   r   r   z: extracted from policy filesz3: removed from stanza, resetting to default value: r   z2: capability probably not supported on this systemz: set z (cache )z
: invalid z value )r}   OrderedDictr   ri   rp   r   r   r   r   r   rb   r   get_attr_default_valuelowerre   r   rc   KeyErrorr   r   )rj   rr   r   r   r   r   r   netlink_attrfunc_ptrcached_valueuser_confignl_values               rD   #get_ifla_bond_attr_from_user_config(bond.get_ifla_bond_attr_from_user_config  s    #--%-11+F
 261I1I-IX"&L"*"?"?	"JK+==OO $ 7 7!" P $ KK%%)/K'I J :*2Q2QR[2\2\ #99)DKK%%)/K'I J {f'(9(9(;<H"'+zz'N'Nv'd"|'; ))-3Y+M N !$'3$ 4<<0#/((vyZegs)tu((FI{)[\g 2Jp 	))&~N	   fKK''VYXc(deefs%   "A)HH2H&H0IIc                 8    U R                    H
  nX!;   d  M
    g   g)NTF)_bond_down_nl_attributes_list)rj   r   r   s      rD   _should_down_bondbond._should_down_bondN  s     99G( : rG   c                 |   U R                   R                  U[        R                  5      nUR	                  [        R                  5      nUb  Xv:w  a  U R
                  R                  U< SU< S35        U(       a  U R                  R                  U5        SnUR                   Hm  nU R                  R                  U5        UR                  [        R                  -  (       a  U R                  R                  U5         UR                  U5        Mo     X54$ U[        R                  	 X54$ ! [          a     M  f = f)Nz: bond mode changed to z : running ops on bond and slavesF)re   r   r   r   r   rb   rc   r   	link_downlowerifaceslink_set_nomasterr   r   r   r   removera   )	rj   rr   r   
is_link_upr   bond_slavescached_bond_moder   	lower_devs	            rD   should_update_bond_modebond.should_update_bond_modeT  s     ::BB64K^K^_'++D,?,?@ %1  $*N"< =LL**62!&J!)!5!5ILL229=  ..1C1K1KK;;IF#**95 "6$ && #4#6#67&& % s   D--
D;:D;c           	         UR                   nU R                  R                  U5      u  p4U R                  X5      nU R	                  X1U5      nU(       ar  U R                  UUUUU R                  R                  U5      5      u  pGU(       a:  U(       a3  U R                  U5      (       a  U R                  R                  U5        SnO/ nU(       a&  U(       d  U R                  R                  SU-  5        OI U R                  R                  X%5        U(       a&  SU["        R$                  '   SU["        R&                  '   U(       a)  U(       a"  U(       d  U R                  R)                  U5        U$ ! [         aF  nU R                  R                  U< S[        U5      < 35        U R!                  X5         S nANS nAff = f)NFz&%s: already exists, no change detectedz: bond setup: r   )r}   re   link_exists_and_upr  r   r  r   r	  r   r   rb   rc   link_add_bond_with_info_datara   r   rd   create_or_set_bond_config_sysfsr   IFLA_BOND_UPDELAYIFLA_BOND_DOWNDELAYr   )	rj   rr   r   r   r  r   remove_delay_from_cacher  rm   s	            rD   create_or_set_bond_configbond.create_or_set_bond_configw  sp   "--"&**"?"?"GBB8Y"&"<"<[Tb"c &*&B&B

%%f-'#J *)).99LL008!&JK~ KKENOO99&Q ' :;t556;<t778>*LL&&v.  O !!&#a&"IJ44XNN	Os   6E0 0
G :<F;;G c                     U R                   R                  UR                  5      (       d%  U R                  R	                  UR                  5        U R                  R                  UR                  U5        g r?   )re   r   r}   r   bond_createbond_set_attrs_nl)rj   rr   r   s      rD   r  $bond.create_or_set_bond_config_sysfs  sI    zz%%hmm44JJ""8==1

$$X]]NCrG   c                      U R                  U5      nU R                  UUU5        g ! [         a%  nU R                  [	        U5      U5         S nAg S nAff = fr?   )r  r   ra   r   rd   )rj   rr   r   r  rm   s        rD   _upbond._up  sU    	-88BK 
  	-NN3q68,,	-s   $' 
AAAc                      U R                   R                  UR                  5        g ! [         a5  nU R	                  UR                  < S[        U5      < 35         S nAg S nAff = f)Nr   )r   link_delr}   ra   log_warnrd   )rj   rr   r   rm   s       rD   _down
bond._down  sI    	>LL!!(--0 	>MMhmmSV<==	>s   %( 
A'+A""A'c                 "   SnU(       a(  U(       a!  [        U5      R                  U5      (       d  SnSU;   d  SU;   a  UnO%/ nU H  nXt;   d  M
  UR                  U5        M     UnUR                  X#(       a  SR	                  U5      OSU5        g )N   r   regexglobr   None)setsymmetric_differencer   update_config_with_statusjoin)rj   ifaceobjcurrr   user_bond_slavesrunning_bond_slavesqueryorderedr   s           rD   _query_check_bond_slavesbond._query_check_bond_slaves  s     3'(==>QRR
 &&&4D*D2G)/NN5) *  '..tScSXX>N5OioqvwrG   c                 (   U R                   R                  UR                  5      (       d)  U R                  R	                  SUR                  -  5        g U R                  UR                  U R                  5       5      nU(       d  g SnS nS n XDR                  S5      	 SnU(       d6  U R                  U5      nU R                   R                  UR                  5      nU R                  USXg5         XDR                  S5      	 U(       d=  U(       d6  U R                  U5      nU R                   R                  UR                  5      nU R                  USXg5        U H  nU R                  U   n	U R                  U	   n
U R                   R                  UR                  U	5      nUR!                  U5      nX" U5      :X  a  UR#                  XS5        Mw  UR#                  U[%        U5      S5        M     g ! [         a     GNf = f! [         a     Nf = f)Nzbond iface %s does not existFr/   Tr0   r   r,  )re   bond_existsr}   rb   r   dict_key_subsetconfigget_mod_attrsindexr   r   r9  ra   _bond_attr_netlink_maprg   r   rp   r2  rd   )rj   rr   r4  r   iface_attrsquery_slavesr5  r6  r   r   translate_funccurrent_configr  s                rD   _query_checkbond._query_check  s   zz%%hmm44KK<x}}LM**8??D<N<N<PQ
 ""	--m<=  L##'#7#7#A &*jj&;&;HMM&J#)),GWm
	--l;<  (8#'#7#7#A &*jj&;&;HMM&J#)),FVl  D"99$?G"JJ7SN"jjEEhmmU\]N&;;DAK!<<66t!L66tS=PRST    		  		s&   A#G3 1A(H 3
H H
HHc                     U (       a  S$ S$ )Nr   r    r   s    rD   translate_nl_value_yesnobond.translate_nl_value_yesno  s    u'4'rG   c                     U (       a  S$ S$ )Nr'   r&   rI  rJ  s    rD   translate_nl_value_slowfast bond.translate_nl_value_slowfast
  s    v*F*rG   c                 ,   U R                   R                  U5      n[        R                  R	                  UR	                  [        R
                  5      5      UR	                  [        R                  5      U R                  UR	                  [        R                  5      5      U R                  UR	                  [        R                  5      5      UR	                  [        R                  5      UR	                  [        R                  5      UR	                  [        R                  5      UR	                  [        R                  5      [        R                  R	                  UR	                  [        R                  5      5      U R                  UR	                  [        R                   5      5      UR	                  [        R"                  5      UR	                  [        R"                  5      UR	                  [        R$                  5      UR	                  [        R&                  5      S.nUR	                  [        R(                  5      nU(       a  U R                   R+                  U5      US'   U R                   R-                  U5      nU(       a  XSS'   U$ )N)r    r   r   r%   r(   r-   r;   r*   r   r.   r   r   r4   r5   r6   r/   )re   get_link_info_datar   ifla_bond_mode_pretty_tblr   r   r   rK  IFLA_BOND_USE_CARRIERrN  IFLA_BOND_AD_LACP_RATEr   IFLA_BOND_AD_ACTOR_SYSTEMIFLA_BOND_AD_ACTOR_SYS_PRIO%ifla_bond_xmit_hash_policy_pretty_tblIFLA_BOND_XMIT_HASH_POLICYIFLA_BOND_AD_LACP_BYPASSIFLA_BOND_NUM_PEER_NOTIFr  r  rh   
get_ifnamer   )rj   bondnamecached_vxlan_ifla_info_data
bond_attrscached_bond_primaryr   s         rD   _query_running_attrsbond._query_running_attrs  s   &*jj&C&CH&M# 77;;<W<[<[\`\o\o<pq6::4;P;PQ $ = =>Y>]>]^b^x^x>y z">>?Z?^?^_c_z_z?{|9==d>V>VW$?$C$CDDbDb$c599$:X:XY&A&E&EdFfFf&g%)%O%O%S%SToTsTstx  uT  uT  UU  &V&*&C&CD_DcDcdh  eB  eB  EC  'D!<!@!@A^A^!_!<!@!@A^A^!_7;;D<R<RS9==d>V>VW

" :==d>T>TU)-)>)>?R)SJ~&&&x0(.}%rG   c           
         U R                   R                  UR                  5      (       d  g U R                  UR                  5      nUR	                  S5      (       a#  SR                  UR	                  S5      5      US'   [        UR                  5       5       VVs/ s H%  u  pEUc  M
  UR                  U[        U5      5      PM'       nng s  snnf )Nr/   r   )
re   r<  r}   r`  r   r3  r   itemsupdate_configrd   )rj   ifaceobjrunningr   r^  kvs         rD   _query_runningbond._query_running+  s    zz%%o&:&:;;../C/CD
>>-(((+1N(OJ}% ***,-	-TQ 
2	&	&q#a&	1-	 	s   	C)C)zpre-upz	post-downquery-runningquery-checkcurrc                 H    [        U R                  R                  5       5      $ )z-returns list of ops supported by this module )r   _run_opskeys)rj   s    rD   get_opsbond.get_ops=  s    DMM&&())rG   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US9  gU" XUS9  g)ay  run bond 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.
Nrj  rk  )r   )rm  r   ry   )rj   rr   	operationquery_ifaceobjr   
op_handlers         rD   runbond.runA  s\    $ ]]&&y1
'h0G0G))t~(8: t8HIrG   )ri   r?   )NN)Ar   
__module____qualname____firstlineno____doc__overrides_ifupdown_scripts_modinfor   r   r   rS  rT  rX  r   rZ  rU  rV  rY  r  r  rh   IFLA_BOND_PRIMARY_RESELECTrA  rJ   r   rK   rd   rg   ri   r\   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r  r  r	  r  r  r  r$  r)  r9  rF  rK  rN  r`  rh  rm  ro  ru  __static_attributes__rI  rG   rD   r
   r
   $   s+   @"- -I
*4 23	!5I
  *"El12	"I
  ,"El12	"I
$ $, $:;&%I
< %"El+,	=I
H # (/0II
d (7./	eI
p ("El./	qI
| #1""Gn89"!9%}I
L %1""Gn:;	'MI
X #4%[DE"!7%YI
f #4%[DE%gI
p %+478	'qI
| % "01
 )>}I
T &"Gn./	UI
` ("Gn01	aI
l 2/0mI
x 0
 <<& 6%[:;II
LH\T((t,, 	D66 	$55	
 	 !@!@ 	$22 	T:: 	T:: 	d44 	 > > 	 > > 	 @ @ 	!$"B"B 	!$"?"? 	..  	$22!" 	..#$ 	 !@!@%0 	As""E$A$A##%T'')Y  #%%s&&((#%%'V  #'')Y/+* 
d))+OP	 $"A"ACst	--s3	433S9	d;;SA	d;;SA	!A!A3G	!4#C#CSI	//5	433S9	T779hi	4668gh	!4#@#@Bqr	t55s;	!?!?E	!?!?E	 $"A"ACst#*B<Y
*84

%EPN: 
		0		!	!#34"
8 
	$	$&67		&	&(:;
06  K\ 	''##  	%!!'F0dD
	->x(1Uf ( ( + +:	 ''	H* 7;!JrG   r
   )r]   ifupdown2.lib.addonr   ifupdown2.nlmanager.nlmanagerr   ifupdown2.ifupdown.ifaceifupdown2.ifupdown.utilsr   ifupdown2.ifupdown.statemanagerr   r    ifupdown2.ifupdown.policymanagerifupdownr    ifupdown2.ifupdown.ifupdownflagsr   #ifupdown2.ifupdownaddons.modulebaser   ImportErrorModuleNotFoundError	lib.addonnlmanager.nlmanagerifupdown.ifaceifupdown.utilsifupdown.statemanagerifupdownaddons.modulebaseifupdown.policymanagerifupdown.ifupdownflagsr
   rI  rG   rD   <module>r     sn    
3)2*.P<<<<>xJ5* xJ 	() 3( $F4223s   5A 7BB