elxl0 を full duplex にする方法

- 注意:
  以下の情報は,正確なものではありません.この設定をしても,スイッチを確認すると harf duplex でしか通信していませんでした.
  解決策は末尾に追記しています.


  Solaris 10 で elxl0 なインタフェースを搭載した機械との scp がやたら遅いので調べてみました.
  

1. まず,インタフェースの確認.

$ ifconfig elxl0
elxl0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
       inet 192.168.1.xxx netmask ffffff00 broadcast 192.168.1.255

2. モジュールの情報を確認

$ modinfo | grep elxl
133 f9a36000   58e8  39   1  elxl (3Com 90XX LAN driver 1.34)

  elxl は 3Com の NIC ということがわかります.

3. 現在の通信方式と接続速度を確認

$ kstat -p :::duplex :::ifspeed
elxl:0:elxl0:duplex     harf
elxl:0:elxl0:ifspeed    0

  通信方式は半二重方式で,接続速度は 0 (???) ということがわかりました.
  これを全二重方式 (full duplex) で接続速度を 100000000 (100M) にしてあげればよさそう.

4. man を見てみる

$ man elxl
Devices                                                  elxl(7D)

NAME
     elxl - 3Com Ethernet device driver

SYNOPSIS
     /kernel/drv/elxl

    :

FILES
     /dev/elxl                       Special character device
     /kernel/drv/elxl.conf           Configuration file for  elxl
                                     driver

  /kernel/drv/elxl.conf が elxl の設定ファイルということがわかりました.

# vi /kernel/drv/elxl.conf

#ident  "@(#)elxl.conf  1.4 00/07/17 SMI"
#
# Copyright (c) 1998, by Sun Microsystems, Inc.
# All rights reserved.
#
# Driver.conf file for the 3Com 3C90x
#
# To force full duplex operation, uncomment the following line:
full-duplex=1;
#
# To force half duplex operation, uncomment the following line:
#full-duplex=0;
#
# To force 10Mbps operation, uncomment the following line:
#speed=10;
#
# To force 100Mbps operation, uncomment the following line:
speed=100;


  これで OK...と思ったら大間違いです.この設定をするとインタフェースが起動しなくなります.
  ですので,先に下の 5 を行うのがいいでしょう.

  注: ndd でテストしてみるのが王道でしょうが,なぜか elxl は ndd で値をセットできませんでした...?

5. 3c90xcfg.exe で通信方式と通信速度を変更する

  3c90xcfg.exe というのは 3Com の NIC の DOS 用 診断プログラムです.
  これをダウンロードしてきて,Boot 可能な FD にコピーして DOS で起動します.

- 3c90x2.exe (含 3c90xcfg.exe)
  ftp://ftp.3com.com/pub/nic/3c90x/3c90x2.exe

  診断プログラムで通信方式を full duplex に,通信速度を 100M に設定します.

6. ブートして確認

  うまくいけば,ちゃんとブートしますので,ここで通信方式と通信速度を確認してみます.

$ kstat -p :::duplex :::ifspeed
elxl:0:elxl0:duplex     full
elxl:0:elxl0:ifspeed    100000000

  無事,全二重方式で 100M に設定されました.もちろん scp も劇的に改善しています.
  環境は Solaris 10 x86 でした.

- ref.: Re: Full duplex with elxl0: 3Com 90XX LAN driver on Solaris x86
  http://www.dbforums.com/showpost.php?s=f058de31a8eb53479a1effb026633668&p= ...


- 追記
  上記の情報は,正確なものではありません.この設定をしても,スイッチを確認すると harf duplex でしか通信していませんでした.

  解決策は単純に /kernel/drv/elxl.conf の speed のみを 100 に設定すれば OK です.

# vi /kernel/drv/elxl.conf

#ident  "@(#)elxl.conf  1.4 00/07/17 SMI"
#
# Copyright (c) 1998, by Sun Microsystems, Inc.
# All rights reserved.
#
# Driver.conf file for the 3Com 3C90x
#
# To force full duplex operation, uncomment the following line:
#full-duplex=1;
#
# To force half duplex operation, uncomment the following line:
#full-duplex=0;
#
# To force 10Mbps operation, uncomment the following line:
#speed=10;
#
# To force 100Mbps operation, uncomment the following line:
speed=100;


  上記手順 5 の 3c90xcfg.exe を使った通信方式と通信速度を変更は必要ありません.

  この設定をしても,kstat の表示は harf duplex のままですが,スイッチで確認すると問題なく full duplex になっています.

$ kstat -p :::duplex :::ifspeed
elxl:0:elxl0:duplex     harf
elxl:0:elxl0:ifspeed    0

  おそらく,ドライバの表示が間違っているのではないかと思われます.