ethtoolコマンドでethernetドライバにget/setする方法
起動時
再起動しても設定が反映されるようにするにはネットワークの設定ファイルにETHTOOL_OPTS行を追加して記述すればよい。
[例]
[/etc/sysconfig/network-scripts/ifcfg-eth0]
DEVICE=eth0 BOOTPROTO=static IPADDR=***.***.***.*** NETMASK=255.255.255.0 ONBOOT=yes ETHTOOL_OPTS="autoneg off speed 100 duplex full" #<===ここ TYPE=Ethernet
ドライバの仕組み
net/core/ethtool.c
- set/getの関数が用意されている
イーサドライバ内
- struct ethtool_opsに登録する
例)drivers/net/8139too.c
net_device構造体で登録
dev->ethtool_ops = &rtl8139_ethtool_ops;
関数ポインタ群の構造体は
static struct ethtool_ops rtl8139_ethtool_ops = {
.get_drvinfo = rtl8139_get_drvinfo,
.get_settings = rtl8139_get_settings,
.set_settings = rtl8139_set_settings,
.get_regs_len = rtl8139_get_regs_len,
.get_regs = rtl8139_get_regs,
.nway_reset = rtl8139_nway_reset,
.get_link = rtl8139_get_link,
.get_msglevel = rtl8139_get_msglevel,
.set_msglevel = rtl8139_set_msglevel,
.get_wol = rtl8139_get_wol,
.set_wol = rtl8139_set_wol,
.get_strings = rtl8139_get_strings,
.get_stats_count = rtl8139_get_stats_count,
.get_ethtool_stats = rtl8139_get_ethtool_stats,
.get_perm_addr = ethtool_op_get_perm_addr,
};
それぞれの動作
ethtool help
- ethtool -S <device>
rtl8139_get_drvinfo: get_drvinfo rtl8139_get_stats_count: get_stats_count rtl8139_get_regs_len: get_regs_len rtl8139_get_stats_count: get_stats_count rtl8139_get_strings: get_strings rtl8139_get_stats_count: get_stats_count rtl8139_get_ethtool_stats: get_ethtool_stats
$ ethtool -S eth0
NIC statistics:
early_rx: 0
tx_buf_mapped: 0
tx_timeouts: 0
rx_lost_in_ring: 0
ethtool <device>
rtl8139_get_settings: get_settings rtl8139_get_wol: get_wol rtl8139_get_msglevel: get_msglevel rtl8139_get_link: get_link
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
ethtool -i
sh-3.00# ethtool -i eth0
driver: 8139too version: 0.9.27 firmware-version: bus-info: 0000:00:01.0
sh-3.00# dmesg
rtl8139_get_drvinfo: get_drvinfo rtl8139_get_stats_count: get_stats_count rtl8139_get_regs_len: get_regs_len
ethtool -d
RealTek RTL-8100B/8139D registers:
------------------------------
0x00: MAC Address 08:00:83:ff:24:32
0x08: Multicast Address Filter 0x80000000 0x00000000
0x10: Transmit Status Desc 0 0x00002000
0x14: Transmit Status Desc 1 0x00002000
0x18: Transmit Status Desc 2 0x00002000
0x1C: Transmit Status Desc 3 0x00002000
0x20: Transmit Start Addr 0 0x0db6a000
0x24: Transmit Start Addr 1 0x0db6a600
0x28: Transmit Start Addr 2 0x0db6ac00
0x2C: Transmit Start Addr 3 0x0db6b200
0x30: Rx buffer addr (C mode) 0x0d500000
0x34: Early Rx Byte Count 0
0x36: Early Rx Status 0x0a
ERxGood ERxOverWrite
0x37: Command 0x0d
Rx on, Tx on
0x38: Current Address of Packet Read (C mode) 0x5768
0x3A: Current Rx buffer address (C mode) 0x5778
0x3C: Interrupt Mask 0xc07f
SERR TimeOut RxFIFO LinkChg RxNoBuf TxErr TxOK RxErr RxOK
0x3E: Interrupt Status 0x0000
0x40: Tx Configuration 0x77400680 0x44: Rx Configuration 0x0000f78e 0x48: Timer count 0x288182c1 0x4C: Missed packet counter 0x000000 0x50: EEPROM Command 0x01 0x51: Config 0 0x10 0x52: Config 1 0x8d 0x54: Timer interrupt 0x00000000 0x58: Media status 0x1c 0x59: Config 3 0xc5 0x5A: Config 4 0x88 0x5C: Multiple Interrupt Select 0x0000 0x5E: PCI revision id 0x10 0x60: Transmit Status of All Desc (C mode) 0x000f 0x62: MII Basic Mode Control Register 0x1100 0x64: MII Basic Mode Status Register 0x7809 0x66: MII Autonegotiation Advertising 0x01c1 0x68: MII Link Partner Ability 0x0000 0x6A: MII Expansion 0x0000 0x6C: MII Disconnect counter 0x0000 0x6E: MII False carrier sense counter 0x0000 0x70: MII Nway test 0x0000 0x72: MII RX_ER counter 0x0000 0x74: MII CS configuration 0x03c0 0x78: PHY parameter 1 0x60f60c59 0x7C: Twister parameter 0x7b732660 0x80: PHY parameter 2 0x1a 0x84: PM CRC for wakeup frame 0 0x80 0x85: PM CRC for wakeup frame 1 0x00 0x86: PM CRC for wakeup frame 2 0x08 0x87: PM CRC for wakeup frame 3 0x00 0x88: PM CRC for wakeup frame 4 0x00 0x89: PM CRC for wakeup frame 5 0x00 0x8A: PM CRC for wakeup frame 6 0x00 0x8B: PM CRC for wakeup frame 7 0x40 0x8C: PM wakeup frame 0 0x00000800 0x00000800 0x94: PM wakeup frame 1 0x00002000 0x00002000 0x9C: PM wakeup frame 2 0x00000000 0x00000000 0xA4: PM wakeup frame 3 0x00000000 0x00010000 0xAC: PM wakeup frame 4 0x00020000 0x00000000 0xB4: PM wakeup frame 5 0x00000000 0x00001800 0xBC: PM wakeup frame 6 0x00010000 0x00000030 0xC4: PM wakeup frame 7 0x00000000 0x00000004 0xCC: PM LSB CRC for wakeup frame 0 0x00 0xCD: PM LSB CRC for wakeup frame 1 0x00 0xCE: PM LSB CRC for wakeup frame 2 0x10 0xCF: PM LSB CRC for wakeup frame 3 0x00 0xD0: PM LSB CRC for wakeup frame 4 0x00 0xD1: PM LSB CRC for wakeup frame 5 0x00 0xD2: PM LSB CRC for wakeup frame 6 0x00 0xD3: PM LSB CRC for wakeup frame 7 0x82 0xD8: Config 5 0x07
rtl8139_get_drvinfo: get_drvinfo rtl8139_get_stats_count: get_stats_count rtl8139_get_regs_len: get_regs_len rtl8139_get_regs_len: get_regs_len rtl8139_get_regs: get_regs
ethtool -r
# ethtool -r eth0 # dmesg -c rtl8139_nway_reset: nway_reset #
ethtool -s
sh-3.00# ethtool -s eth0 speed 100
sh-3.00# dmesg -c
rtl8139_get_settings: get_settings
rtl8139_set_settings: set_settings
usage
ethtool version 1.8
Usage:
ethtool DEVNAME
ethtool -a DEVNAME
ethtool -A DEVNAME \
[ autoneg on|off ] \
[ rx on|off ] \
[ tx on|off ]
ethtool -c DEVNAME
ethtool -C DEVNAME \
[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-low N] \
[pkt-rate-high N] \
[rx-usecs-high N] \
[rx-frames-high N] \
[tx-usecs-high N] \
[tx-frames-high N] \
[sample-interval N]
ethtool -g DEVNAME
ethtool -G DEVNAME \
[ rx N ] \
[ rx-mini N ] \
[ rx-jumbo N ] \
[ tx N ]
ethtool -i DEVNAME
ethtool -d DEVNAME
ethtool -e DEVNAME \
[ raw on|off ] \
[ offset N ] \
[ length N ]
ethtool -E DEVNAME \
[ magic N ] \
[ offset N ] \
[ value N ]
ethtool -k DEVNAME
ethtool -K DEVNAME \
[ rx on|off ] \
[ tx on|off ] \
[ sg on|off ] \
[ tso on|off ]
ethtool -r DEVNAME
ethtool -p DEVNAME [ %d ]
ethtool -t DEVNAME [online|(offline)]
ethtool -s DEVNAME \
[ speed 10|100|1000 ] \
[ duplex half|full ] \
[ port tp|aui|bnc|mii|fibre ] \
[ autoneg on|off ] \
[ phyad %d ] \
[ xcvr internal|external ] \
[ wol p|u|m|b|a|g|s|d... ] \
[ sopass %x:%x:%x:%x:%x:%x ] \
[ msglvl %d ]
ethtool -S DEVNAME