1 | ethtool
|
2 | ===
|
3 |
|
4 | 显示或修改以太网卡的配置信息
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。
|
9 |
|
10 | ### 语法
|
11 |
|
12 | ```shell
|
13 | ethtool [ -a | -c | -g | -i | -d | -k | -r | -S |] ethX
|
14 | ethtool [-A] ethX [autoneg on|off] [rx on|off] [tx on|off]
|
15 | ethtool [-C] ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N][pkt-rate-low N][rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-lowN] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N]
|
16 | ethtool [-G] ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]
|
17 | ethtool [-e] ethX [raw on|off] [offset N] [length N]
|
18 | ethtool [-E] ethX [magic N] [offset N] [value N]
|
19 | ethtool [-K] ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off]
|
20 | ethtool [-p] ethX [N]
|
21 | ethtool [-t] ethX [offline|online]
|
22 | ethtool [-s] ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] [port tp|aui|bnc|mii] [phyad N] [xcvr internal|external]
|
23 | [wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]
|
24 | ```
|
25 |
|
26 | ### 选项
|
27 |
|
28 | ```shell
|
29 | -a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
|
30 | -A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
|
31 | -c display the Coalesce information of the specified ethernet card。
|
32 | -C Change the Coalesce setting of the specified ethernet card。
|
33 | -g Display the rx/tx ring parameter information of the specified ethernet card。
|
34 | -G change the rx/tx ring setting of the specified ethernet card。
|
35 | -i 显示网卡驱动的信息,如驱动的名称、版本等。
|
36 | -d 显示register dump信息, 部分网卡驱动不支持该选项。
|
37 | -e 显示EEPROM dump信息,部分网卡驱动不支持该选项。
|
38 | -E 修改网卡EEPROM byte。
|
39 | -k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。
|
40 | -K 修改网卡Offload参数的状态。
|
41 | -p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。
|
42 | -r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation。
|
43 | -S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
|
44 | -t 让网卡执行自我检测,有两种模式:offline or online。
|
45 | -s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。
|
46 | ```
|
47 |
|
48 | ### 数据来源
|
49 |
|
50 | Ethtool命令显示的信息来源于网卡驱动层,即TCP/ip协议的链路层。该命令在Linux内核中实现的逻辑层次为:
|
51 |
|
52 | 最重要的结构体`struct ethtool_ops`,该结构体成员为用于显示或修改以太网卡配置的一系列函数指针,见下表中的第二列。
|
53 |
|
54 | 网卡驱动负责实现(部分)这些函数,并将其封装入`ethtool_ops`结构体,为网络核心层提供统一的调用接口。因此,不同的网卡驱动会给应用层返回不同的信息。`Ethtool命令选项`、`struct ethtool_ops成员函数`、`Ethtool命令显示参数的来源`,三者间的对应关系如下表所示:
|
55 |
|
56 | <table>
|
57 | <tbody>
|
58 | <tr>
|
59 | <th style="width: 100px;">命令选项</th>
|
60 | <th>struct ethtool_ops成员函数</th>
|
61 | <th>Ethtool命令显示参数的来源(以网卡驱动BNX2为例)</th></tr>
|
62 | <tr>
|
63 | <td>无 -s</td>
|
64 | <td>get_settingsget_wol get_msglevel get_link set_settings set_wol set_msglevel</td>
|
65 | <td>从网卡寄存器中获得网卡速度等信息,可配置。</td>
|
66 | </tr>
|
67 | <tr>
|
68 | <td>-a -A</td>
|
69 | <td>get_pauseparam set_pauseparam</td>
|
70 | <td>从网卡寄存器中获得Autonegotiate/RX/TX模块的状态:on oroff,可配置。</td>
|
71 | </tr>
|
72 | <tr>
|
73 | <td>-c -C</td>
|
74 | <td>get_coalesceset_coalesce</td>
|
75 | <td>从网卡寄存器中获得coalescing参数:TX/RX一个数据包后,推迟发生TX/RX中断的时间(us)/数据包个数。—减小该值可以提高网卡的响应时间。 当rx-usecs&rx-frames同时被设为0时,RX中断停止。 当tx-usecs&tx-frames同时被设为0时,TX中断停止。</td>
|
76 | </tr>
|
77 | <tr>
|
78 | <td>-g -G</td>
|
79 | <td>get_ringparam set_ringparam</td>
|
80 | <td>除当前TX/RX ring的值(从网卡寄存器中读取得到,可配置)外,其它为网卡bnx2自己固定的信息。</td>
|
81 | </tr>
|
82 | <tr>
|
83 | <td>-k -K</td>
|
84 | <td>get_rx_csumget_tx_csum get_sg get_tso set_rx_csum set_tx_csum set_sg set_tso</td>
|
85 | <td>显示信息从保存该状态的变量中读取得到,没有对应的寄存器。因此,TX/RX校验等模块一直处于on状态,实际上是无法修改的。</td>
|
86 | </tr>
|
87 | <tr>
|
88 | <td>-i</td>
|
89 | <td>get_drvinfo[self_test_count, get_stats_coun,t get_regs_len, get_eeprom_len]</td>
|
90 | <td>网卡bnx2自己固定的信息,如:
|
91 | ——————————————————–
|
92 | driver: bnx2 version: 1.4.30 firmware-version: 1.8.0.5 bus-info: 0000:09:00.0
|
93 | ——————————————————–</td>
|
94 | </tr>
|
95 | <tr>
|
96 | <td>-d</td>
|
97 | <td>get_drvinfoget_regs</td>
|
98 | <td>不支持,即bnx2中没有实现函数get_regs。</td>
|
99 | </tr>
|
100 | <tr>
|
101 | <td>-e -E</td>
|
102 | <td>get_eepromset_eeprom</td>
|
103 | <td>不支持,即bnx2中没有实现函数get_eeprom。</td>
|
104 | </tr>
|
105 | <tr>
|
106 | <td>-r</td>
|
107 | <td>nway_reset</td>
|
108 | <td>配置网卡MII_BMCR寄存器,重启Auto negotiation模块。</td>
|
109 | </tr>
|
110 | <tr>
|
111 | <td>-p</td>
|
112 | <td>phys_id</td>
|
113 | <td>配置网卡BNX2_EMAC_LED寄存器,实现LED闪功能。</td>
|
114 | </tr>
|
115 | <tr>
|
116 | <td>-t</td>
|
117 | <td>self_test</td>
|
118 | <td>通过配置网卡寄存器,逐一测试网卡的硬件模块:registers,memory,loopback,Link stat,interrupt。</td>
|
119 | </tr>
|
120 | <tr>
|
121 | <td>-S</td>
|
122 | <td>get_ethtool_stats</td>
|
123 | <td>显示信息来源于网卡驱动中的结构体变量stats_blk。(网卡通过DMA方式,将寄存器BNX2_HC_STATISTICS _ADDR_L和BNX2_HC_STATISTICS_ADDR_H中的数据实时地读取到结构体变量struct statistics_block *stats_blk中。) —显示的数据都是从网卡寄存器中统计得到的,各项的含义需查询网卡(芯片)手册。</td>
|
124 | </tr>
|
125 | </tbody>
|
126 | </table>
|
127 |
|
128 | 由上可见,ethtool命令用于显示/配置网卡硬件(寄存器)。
|
129 |
|
130 | ### 实例
|
131 |
|
132 | 查看机器上网卡的速度:百兆还是千兆,请输入:
|
133 |
|
134 | ```shell
|
135 | ethool eth0
|
136 | ```
|
137 |
|
138 | 操作完毕后,输出信息中`Speed:`这一项就指示了网卡的速度。停止网卡的发送模块TX,请输入:
|
139 |
|
140 | ```shell
|
141 | ethtool -A tx off eth0
|
142 | ```
|
143 |
|
144 | 操作完毕后,可输入`ethtool -a eth0`,查看tx模块是否已被停止。查看网卡eth0采用了何种驱动,请输入:
|
145 |
|
146 | ```shell
|
147 | ethtool -i eth0
|
148 | ```
|
149 |
|
150 | 操作完毕后,显示 driver: bnx2;version: 1.4.30 等信息。关闭网卡对收到的数据包的校验功能,请输入:
|
151 |
|
152 | ```shell
|
153 | ethtool -K eth0 rx off
|
154 | ```
|
155 |
|
156 | 操作完毕后,可输入`ethtool –k eth0`,查看校验功能是否已被停止。如果机器上安装了两块网卡,那么eth0对应着哪块网卡呢?输入:
|
157 |
|
158 | ```shell
|
159 | ethtool -p eth0 10
|
160 | ```
|
161 |
|
162 | 操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡。查看网卡,在接收/发送数据时,有没有出错?请输入:
|
163 |
|
164 | ```shell
|
165 | ethtool –S eth0
|
166 | ```
|
167 |
|
168 | 将千兆网卡的速度降为百兆,请输入:
|
169 |
|
170 | ```shell
|
171 | ethtool -s eth0 speed 100
|
172 | ```
|
173 |
|
174 |
|
175 |
|
\ | No newline at end of file |