£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
<eF                 @   sH   d gZ ddlZddlT ddlZej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	  i'  autoFc             C   sb   || _ | j  tjd|| j| j| j| jf  tjd|| j| j	f  tj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   /usr/lib/python3.6/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   s8   d}x.|D ]&}|| j |d  |d r(dnd 7 }q
W |S )Nr   r   )_advertise_values)r   Z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   ethtoolz-sr   onZoff)	close_fds)r   r   callr   )r   enabler   r   r   _set_autonegotiation5   s
    
zNettool._set_autonegotiationc             C   s.   | j dsdS dtdd| jdd| gddkS )	NTFr   r%   z-sZ	advertisez0x%03x)r'   )r*   r(   r   )r   valuer   r   r   _set_advertise>   s    
zNettool._set_advertisec             C   s<   d}x"| j D ]}|d |kr|d }qW |dkr4|S dS d S )Nr   i  )r   )r   maxr"   r   r   r   get_max_speedD   s     zNettool.get_max_speedc             C   s6   | j s| j rdS | j| jd r.| j  dS dS d S )NFr   T)	_disabledr   r,   r!   r   )r   r   r   r   set_max_speedN   s    zNettool.set_max_speedc             C   s   | j s| j rdS d}xD| jD ]:}|dkr,q||kr|| j| d 7 }|| j| d 7 }qW || j| j@ }tjd| j||f  | j|r| j	  dS dS d S )NFr   r   r   z)%s: set_speed(%d) - effective_mode 0x%03xT)
r/   r   r!   r$   r   r   r   r   r,   r   )r   r   r"   ZamZ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}|j d }|j d }|d	krtjd
| j  tjd| j|j	ddf  | j
  d| _ d S | j
  tjd}tjd}d}xb|jdD ]R}|jdrj|d d) }	|	dkrd}nt|	dkrd}nd|	dkrd}nT|	dkr"d}nD|	dkr2d}n4|	dkrBd}n$|	dkrRd}n|	d krbd!}nd}~	q|dkry|j|jd| _W n   d"| _Y nX d}q|dkr|d#k| _d}q|dkr|d$kp|d%k| _d}q|dkr|d$k| _d}q|dkrnyLx@|j D ]4}
|j|
jdd&\}}| jjt||d#kf qW ~
~~W n   | jjd* Y nX q|dkr|d'k| _d}q|dkryV|d(krx@|j D ]4}
|j|
jdd&\}}| jjt||d#kf qW ~
~~W n   | jjd+ Y nX q|d!kr|d'k| _d}qW d S ),Nr%   T)stdoutstderrr'   universal_newlinesZsedzs/^\s*//;s/:\s*/:\n/g)stdinr2   r4   r'   r   r    z*%s: some errors were reported by 'ethtool'z%s: %s
z\nz(\d+)z(\d+)baseT/(Half|Full)wait:ZSpeedr   ZDuplexZduplexzAuto-negotiationr   zLink detectedr   zSupported link modesr   zSupports auto-negotiationr   zAdvertised link modesr   zAdvertised auto-negotiationr     ZFullyesr&   r   ZYeszNot reported)r:   T)r:   T)r/   Popenr   PIPEr2   Zcommunicater   Zwarningr   replacer    recompilesplitendswithmatchgroupr   r   r   r   r   appendintr   r   r   )r   Z	p_ethtoolZp_filteroutputerrorsZre_speedZre_modestatelineZsectionr#   sdr   r   r   r   n   s    


 
 
 
 
 
 
 
 













zNettool.updateN)__name__
__module____qualname__r!   r/   r   r    r$   r*   r,   r.   r0   r1   r   r   r   r   r   r   	   s    	
r   c             C   s"   | t jkrt| t j| < t j|  S )N)r   listr   )r   r   r   r   r      s    
)__all__Z
tuned.logsZtuned
subprocessr@   Zlogsgetr   r   r   rQ   r   r   r   r   <module>   s   
 H