
    /I_o"                         S SK r S SKr S SKJr  S SKJr  S SKJr  S SKJ	r	   " S S\\5      r\" 5       rg! \
\4 a    S SKJr  S SKJr  S SKJr  S SKJ	r	   N6f = f)    N)IO)Requirements)utils)Linkc                      \ rS rSr\R
                  S\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S	\R                  S
\R                  S\R                  S\R                   S\R"                  S0rS r\S 5       r\S 5       rS rS rS rS rS rS rS rS rS rS r \S 5       r!S r"S r#S r$S  r%S! r&S" r'S#r(g$)%__Sysfs,   modemiimonuse_carrier	lacp_ratexmit_hash_policy	min_linksnum_grat_arpad_actor_systemad_actor_sys_priolacp_bypassupdelay	downdelayprimaryc                     [         R                  " U 5        [        R                  " U 5        S U l        [        R                  (       d  U R
                  U l        g g N)r   __init__r   cachebridge_utils_is_installedbridge_get_mcqv4src_dry_runbridge_get_mcqv4src)selfs    !/usr/share/ifupdown2/lib/sysfs.pyr   __Sysfs.__init__>   sC    
Dd# 
 55'+'G'GD$ 6    c                      [         R                   " SU -  5      nU(       d  / $ U Vs/ s H%  n[        R                  R                  U5      SS  PM'     sn$ s  snf ! [         a    / s $ f = f)Nz/sys/class/net/%s/upper_*   globospathbasename	Exception)ifnameuppersus      r   link_get_uppers__Sysfs.link_get_uppersK   e    	YY:VCDF	5;<VBGG$$Q'+V<<< 	I	'   !A A ,AA A A+*A+c                      [         R                   " SU -  5      nU(       d  / $ U Vs/ s H%  n[        R                  R                  U5      SS  PM'     sn$ s  snf ! [         a    / s $ f = f)Nz/sys/class/net/%s/lower_*r#   r$   )r*   lowersls      r   link_get_lowers__Sysfs.link_get_lowersU   r/   r0   c                 0    SU R                  SU-  5      :H  $ )z
Read sysfs operstate file
upz/sys/class/net/%s/operstateread_file_oneliner   r*   s     r   
link_is_up__Sysfs.link_is_up_   s      t--.Kf.TUUUr!   c                 *    U R                  SU-  5      $ )z&
Read MAC hardware address from sysfs
z/sys/class/net/%s/addressr8   r:   s     r   get_link_address__Sysfs.get_link_addresse   s     %%&AF&JKKr!   c                 N    [        U R                  SU-  5      =(       d    S5      $ )N/sys/class/net/%s/mtur   intr9   r:   s     r   link_get_mtu__Sysfs.link_get_mtuo   s#    4))*AF*JKPqQQr!   c                     U R                   R                  U5      U:w  a7  U R                  SU-  U5      (       a  U R                   R                  X5        g g g NrA   )r   get_link_mtuwrite_to_fileoverride_link_mtur   r*   mtu_strmtu_ints       r   link_set_mtu__Sysfs.link_set_mtur   sO    ::""6*g5!!"9F"BGLL

,,V= M 6r!   c                 .    U R                  SU-  U5        g rG   rI   rK   s       r   link_set_mtu_dry_run__Sysfs.link_set_mtu_dry_runw   s    2V;WEr!   c                     U R                   R                  U5      nX2:X  a  g U(       d  SnU R                  SU-  U5      (       a  g g )N
/sys/class/net/%s/ifalias)r   get_link_aliasrI   )r   r*   aliascached_aliass       r   link_set_alias__Sysfs.link_set_alias   sI    zz008 E9FBEJJ Kr!   c                 @    U(       d  SnU R                  SU-  U5        g )N rV   rQ   )r   r*   rX   s      r   link_set_alias_dry_run__Sysfs.link_set_alias_dry_run   s     E6?Gr!   c                 *    U R                  SU-  5      $ )Nz/sys/class/net/%s/brport/pvidr8   )r   bridge_port_names     r   bridge_port_pvids_get__Sysfs.bridge_port_pvids_get   s    %%&EHX&XYYr!   c                     SU-  n[         R                  R                  U5      (       d  gU R                  U5      nU(       d  g [	        U5      nUS:  a  S$ S$ ! [
         a     gf = f)Nz"/sys/class/net/%s/bridge/stp_stateerrorr   yesnounknown)r&   r'   existsr9   rC   r)   )r   bridgestp_state_path	stp_statestp_state_ints        r   bridge_get_stp__Sysfs.bridge_get_stp   sj    =Fww~~n--**>:			NM)A-5747 		s   A A 
A'&A'c                    0 n SU-  n[         R                  R                  U5      (       aF  U R                  U5      =(       d    /  H(  nUR	                  S5      u  pVUR                  5       X%'   M*     U$ ! [         aI  nU R                  R                  S[        R                  -  5        U R                  U l        0 s S nA$ S nAff = f)Nz./sys/class/net/%s/bridge/multicast_v4_queriers=z-%s showmcqv4src: skipping unsupported command)r&   r'   ri   	read_filesplitstripr)   loggerinfor   	brctl_cmdr   r   )r   rj   mcqv4srcfilenamelinevlan_idipes           r   r   __Sysfs.bridge_get_mcqv4src   s    
	G&PHww~~h'' NN84::D"&**S/KG(*
H% ; O 	KKLu^_'+'G'GD$I	s   A0A5 5
C?>C=CCc                     0 $ r    )rj   s    r   r   #__Sysfs.bridge_get_mcqv4src_dry_run   s    	r!   c                     U R                   R                  X!5      (       a8  U R                  SU-  SU-  5      (       a  U R                   R                  X!S9  g g g )N /sys/class/net/%s/bonding/slaves-%s)slavemaster)r   is_link_enslaved_torI   override_cache_unslave_linkr   	bond_name
slave_names      r   bond_remove_slave__Sysfs.bond_remove_slave   sX    ::))*@@!!"Dy"PRWZdRdee

66Z6Z f Ar!   c                 4    U R                  SU-  SU-  5        g )Nr   r   rQ   r   s      r   bond_remove_slave_dry_run!__Sysfs.bond_remove_slave_dry_run   s    =	I5S]K]^r!   c                 p    U R                   R                  U5      (       a  g U R                  SSU-  5        g Nz/sys/class/net/bonding_mastersz+%s)r   bond_existsrI   r   r   s     r   bond_create__Sysfs.bond_create   s0    ::!!),,;UY=NOr!   c                 .    U R                  SSU-  5        g r   rQ   r   s     r   bond_create_dry_run__Sysfs.bond_create_dry_run   s    ;UY=NOr!   c                    Sn[        UR                  5       5       H  u  pE U R                  R                  U5      nUc)  U R                  R                  U< SU< SU< S35        MM  SU< SU< 3n[        R                  R                  U5      (       a  U R                  U[        U5      5        M  M     g! [         a>  nU R                  R                  U< SU< S	U< S[        U5      < 35         SnAM  SnAff = f)
z
bond_set_attrs_nl doesn't need a _dry_run handler because each
entry in ifla_info_data was checked against the cache already.
Here write_to_file already has a dry_run handler.
:param bond_name:
:param ifla_info_data:
:return:
NoneNz.: sysfs configuration: unknown bond attribute z (value )z/sys/class/net/z	/bonding/z:  )listitems&_Sysfs__bond_netlink_to_sysfs_attr_mapgetru   warningr&   r'   ri   rI   strr)   )r   r   ifla_info_databond_attr_namenl_attrvalue	file_pathr}   s           r   bond_set_attrs_nl__Sysfs.bond_set_attrs_nl   s      ">#7#7#9:NGb!%!F!F!J!J7!S!)KK''$gu6  * ?HX	77>>),,&&y#e*= - ;  b##y.RWY\]^Y_$`aabs   AB9)A	B99
D3C<<Dc                 N    [        U R                  SU-  5      =(       d    S5      $ )Nz'/proc/sys/net/ipv6/conf/%s/disable_ipv6r   rB   r:   s     r   get_ipv6_conf_disable_ipv6"__Sysfs.get_ipv6_conf_disable_ipv6   s%    4))*SV\*\]babccr!   )r   r   N))__name__
__module____qualname____firstlineno__r   IFLA_BOND_MODEIFLA_BOND_MIIMONIFLA_BOND_USE_CARRIERIFLA_BOND_AD_LACP_RATEIFLA_BOND_XMIT_HASH_POLICYIFLA_BOND_MIN_LINKSIFLA_BOND_NUM_PEER_NOTIFIFLA_BOND_AD_ACTOR_SYSTEMIFLA_BOND_AD_ACTOR_SYS_PRIOIFLA_BOND_AD_LACP_BYPASSIFLA_BOND_UPDELAYIFLA_BOND_DOWNDELAYIFLA_BOND_PRIMARYr   r   staticmethodr-   r4   r;   r>   rD   rN   rR   rZ   r^   rb   rn   r   r   r   r   r   r   r   r   __static_attributes__r   r!   r   r   r   ,   s=    	Vx""M##['');  +%%~&&(9((*=%%}	  +	($ H    VLR>
F
HZ"  [_
P
P
b@dr!   r   )r&   r%   ifupdown2.lib.ior   ifupdown2.lib.base_objectsr   ifupdown2.ifupdown.utilsr   ifupdown2.nlmanager.nlpacketr   ImportErrorModuleNotFoundErrorlib.iolib.base_objectsifupdown.utilsnlmanager.nlpacketr   Sysfsr   r!   r   <module>r      s^   2 
 (#7.1Idb, IdX 		k 	() (-$'(s   6  AA