ネットワークの全二重/半二重の設定(SUN)

<−戻る

 

 データのバックアップ用サーバでネットワークがらみのトラブルが起きました.バックアップをするときには,通常のスピードが出ているのですが,リストアするときには,非常に遅いのです.通信はしているのですが,電話線でつないでいるのではないかと思われるくらい遅い状態です.特定のマシンとの接続では特に遅いようでした.

 いろいろと調べてみると,どうやら,サーバとスイッチとの間で,全二重/半二重のオートネゴシエーションがうまくいっていないようでした.サーバ側で見ると,半二重なのですが,スイッチ側で見ると全二重になっていました.

 これらは,それぞれに手動で設定して簡単に直るかと思いましたが,SUNのhmeドライバのこの設定がちょっと難しくて,結構時間がかかってしまいました.今後の備忘録として,この場に設定方法を記録しておきます.

SUN Solarisfull-duplex, half-duplexの設定の仕方

(参考資料:The hme SunFastEthernet Device Drier, part No.802-7308-10)

現在の動作状態を見る方法.これらのコマンドで見ることができる.

ndd /dev/hme link_status          0: down, 1:up
ndd /dev/hme link_mode            0: half-duplex, 1:full-duplex
ndd /dev/hme link_speed          0:10M, 1:100M

現在の動作可能な設定を見る方法.各パラメタはその動作が可能かどうかを設定するだけである.そのため,複数項目1にしてもかまわないし,1になっているからその設定で動作しているとは限らない.あくまでも,その動作が可能かどうかである.auto-negotiationモードの場合には,それ以下の1になっている項目の中からネゴシエーションを行う.forced modeの場合には,それ以下の1になっている項目のうち,プライオリティのもっとも高い項目を設定値とする.プライオリティは,ここに書いてある順(上が高い)である.

ndd /dev/hme adv_autuneg_cap                0: forced mode, 1: auto-negotiation
ndd /dev/hme adv_100fdx_cap                  0: OFF, 1:ON 以下同じ
ndd /dev/hme adv_100T4_cap
ndd /dev/hme adv_100hdx_cap
ndd /dev/hme adv_10fdx_cap
ndd /dev/hme adv_10hdx_cap

ネットワークのリンク先(HUBやスイッチ)のパラメータも知ることができる.これによって,HUB側の設定可能な値を知ることができる.

ndd /dev/hme lp_autoneg_cap
ndd /dev/hme lp_100fdx_cap
ndd /dev/hme lp_100T4_cap
ndd /dev/hme lp_100hdx_cap
ndd /dev/hme lp_10fdx_cap
ndd /dev/hme lp_10hdx_cap

パラメータには,その他,autoneg_cap, 100T4_cap, 100fdx_cap, 100hdx_cap, 10fdx_cap, 10hdx_capがある.これらは,ハード的にその動作が可能かどうかを示すパラメータである.リードオンリーであり,あまり関係ない.

 

例)手動で100BTFull duplexに設定する.

オートネゴシエーションにしていると,HUB側とサーバ側とでFull-duplexHalf-duplexの値が違ってしまい,通信が不安定な状態になってしまうことがある.原因は分からないが,それぞれを手動にして値を設定することで状況を改善することが出来る.

リンク先の動作の可能性は以下のコマンドで確認可能.

ndd /dev/hme lp_autoneg_cap
ndd /dev/hme lp_100fdx_cap

ndd /dev/hme lp_100T4_cap
ndd /dev/hme lp_100hdx_cap
ndd /dev/hme lp_10fdx_cap
ndd /dev/hme lp_10hdx_cap

ただし,リンク先の実際の動作はこれら値でも分からないので,その情報を事前に入手する.

これらの情報によって,ネゴシエーションをオートにするのか手動にするのか,どの設定にするのか検討する.ここでは,手動で100BTFull-duplexに設定することを例にする.SUNのマシンが単一のhmeデバイスしか持っていないことを想定)

まず,HUB側を手動で100BT, Full-duplexにする.

次に100BTFull duplexの動作を可能にする.

ndd set /dev/hme adv_100fdx_cap 1

それ以外の動作を不可にする.

ndd set /dev/hme adv_100T4_cap 0
ndd set /dev/hme adv_100hdx_cap 0
ndd set /dev/hme adv_10fdx_cap 0
ndd set /dev/hme adv_10hdx_cap 0

最後にforced modeにする.このとき通信が一瞬途切れる.

ndd set /dev/hme adv_autoneg_cap 0

動作の確認.以下の両方とも1になっていることを確認する.

ndd /dev/hme link_mode
ndd /dev/hme link_speed

ここまでは動作確認だけである.

 

マシンをリブートしたら設定値は消えてしまうので,/etc/systemファイルにこれらを同じように記入する.リブートが可能なマシンであれば,最初から/etc/systemファイルに書いても良い.

/etc/systemに以下の値を記入する.パラメータ名が頭hme_と多少変わるがこれはマニュアル通り.

set hme:hme_adv_100fdx_cap = 1
set hme:hme_adv_100T4_cap = 0
set hme:hme_adv_100hdx_cap = 0
set hme:hme_adv_10fdx_cap = 0
set hme:hme_adv_10hdx_cap = 0
set hme:hme_adv_autoneg_cap = 0

リブート後,再度通信と設定の確認を行い完了.

ndd /dev/hme link_mode
ndd /dev/hme link_speed

追記)複数のhmeデバイスがあり,それぞれ別の設定をしたい時には,設定が多少複雑になる.nddでの動作確認の時には,先にこのコマンドを打つ必要がある.

ndd  set /dev/hme hme 1       (hme1を設定したい場合)

このときのデバイスとhmeなどのインスタンス名とのマッピングは/etc/path_to_instに記録されている.また,/etc/systemの設定では,マシン上にある全てのhmeデバイスに関して同一の設定をしてしまうようである.リブート後も残るようにするためには,/kernal/drv中にhme.confファイルを作る方法で設定する.やり方が複雑なため,ここでは省略する.詳しくは参考資料の24ページにある.

 

<−戻る

Last Update:03/05/30 , Wasabi