<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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r˜t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ròd}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r¤y|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ræx@|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ÆW 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