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