o
    •Û_F  ã                   @   sH   d gZ ddlZddlT ddlZej ¡ ZG dd„ dƒZdd „ Z	i e	_
dS )Úethcardé    N)Ú*c                   @   s~   e Zd Zddgddgddgddgdd	gd
dœZdZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS ) ÚNettoolé   é   é   é   é   é    r   i €  i   é?   )é
   éd   éè  iÄ	  i'  ÚautoFc                 C   sb   || _ |  ¡  t d|| j| j| j| jf ¡ t d|| j| j	f ¡ t d|| j
| jf ¡ d S )Nz1%s: speed %s, full duplex %s, autoneg %s, link %sz"%s: supports: autoneg %s, modes %sz$%s: advertises: autoneg %s, modes %s)Ú
_interfaceÚupdateÚlogÚdebugÚspeedÚfull_duplexÚautonegÚlinkÚsupported_autonegÚsupported_modesÚadvertised_autonegÚadvertised_modes)ÚselfÚ	interface© r   ú5/usr/lib/python3/dist-packages/tuned/utils/nettool.pyÚ__init__   s
    zNettool.__init__c                 C   s4   d| _ d| _d| _d| _g | _d| _g | _d| _d S )Nr   F)r   r   r   r   r   r   r   r   ©r   r   r   r   Ú_clean_status"   s   
zNettool._clean_statusc                 C   s4   d}|D ]}|| j |d  |d rdnd 7 }q|S )Nr   r   )Ú_advertise_values)r   ÚmodesÚmodeÚmr   r   r   Ú_calculate_mode.   s   $zNettool._calculate_modec                 C   s<   | j |krdS | jsdS dtdd| jd|rdndgdd	kS )
NTFr   Úethtoolú-sr   ÚonÚoff©Ú	close_fds)r   r   Úcallr   )r   Úenabler   r   r   Ú_set_autonegotiation5   s
   
$zNettool._set_autonegotiationc                 C   s.   |   d¡sdS dtdd| jdd| gddkS )	NTFr   r(   r)   Ú	advertisez0x%03xr,   )r0   r.   r   )r   Úvaluer   r   r   Ú_set_advertise>   s   
 zNettool._set_advertisec                 C   s4   d}| j D ]}|d |kr|d }q|dkr|S dS )Nr   r   )r   )r   Úmaxr%   r   r   r   Úget_max_speedD   s   
€zNettool.get_max_speedc                 C   s0   | j s| jsdS |  | jd ¡r|  ¡  dS dS )NFr   T)Ú	_disabledr   r3   r#   r   r!   r   r   r   Úset_max_speedN   s   zNettool.set_max_speedc                 C   s–   | j s| jsdS d}| jD ]}|dkrq||kr*|| j| d 7 }|| j| d 7 }q||  | j¡@ }t d| j||f ¡ |  |¡rI|  	¡  dS dS )NFr   r   r   z)%s: set_speed(%d) - effective_mode 0x%03xT)
r6   r   r#   r'   r   r   r   r   r3   r   )r   r   r%   ÚamÚeffective_moder   r   r   Ú	set_speedY   s   

€
zNettool.set_speedc                 C   sî  | j rd S td| jgttddd}tddg|jtddd}| ¡ d }| ¡ d }|d	krLt d
| j ¡ t d| j| 	dd¡f ¡ |  
¡  d| _ d S |  
¡  t d¡}t d¡}d}| d¡D ]}| d¡r«|d d… }	|	dkrvd}n3|	dkr}d}n,|	dkr„d}n%|	dkr‹d}n|	dkr’d}n|	dkr™d}n|	dkr d }n	|	d!kr§d"}nd}~	qa|dkrÅz| |¡ d¡| _W n   d#| _Y d}qa|dkrÑ|d$k| _d}qa|dkrá|d%kpÜ|d&k| _d}qa|dkrí|d%k| _d}qa|dkr!z#| ¡ D ]}
| |
¡ dd'¡\}}| j t|ƒ|d$kf¡ q÷~
~~W qa   | j d(¡ Y qa|dkr.|d)k| _d}qa|d krhz)|d*kr[| ¡ D ]}
| |
¡ dd'¡\}}| j t|ƒ|d$kf¡ q=~
~~W qa   | j d(¡ Y qa|d"krt|d)k| _d}qad S )+Nr(   T)ÚstdoutÚstderrr-   Úuniversal_newlinesÚsedzs/^\s*//;s/:\s*/:\n/g)Ústdinr;   r=   r-   r   r   Ú z*%s: some errors were reported by 'ethtool'z%s: %sÚ
z\nz(\d+)z(\d+)baseT/(Half|Full)Úwaitú:éÿÿÿÿÚSpeedr   ÚDuplexÚduplexzAuto-negotiationr   zLink detectedr   zSupported link modesr   zSupports auto-negotiationr   zAdvertised link modesr   zAdvertised auto-negotiationr   r   ÚFullÚyesr*   r   )r   TÚYeszNot reported)r6   ÚPopenr   ÚPIPEr;   Úcommunicater   Úwarningr   Úreplacer"   ÚreÚcompileÚsplitÚendswithÚmatchÚgroupr   r   r   r   r   ÚappendÚintr   r   r   )r   Ú	p_ethtoolÚp_filterÚoutputÚerrorsÚre_speedÚre_modeÚstateÚlineÚsectionr&   ÚsÚdr   r   r   r   n   sš   
þý










€

€ÁzNettool.updateN)Ú__name__Ú
__module__Ú__qualname__r#   r6   r    r"   r'   r0   r3   r5   r7   r:   r   r   r   r   r   r   	   s$    ú		
r   c                 C   s"   | t jvrt| ƒt j| < t j|  S )N)r   Úlistr   )r   r   r   r   r   Ð   s   

)Ú__all__Ú
tuned.logsÚtunedÚ
subprocessrP   ÚlogsÚgetr   r   r   rf   r   r   r   r   Ú<module>   s    
 H
