1000BASE-Tではオートネゴシエーションが必須

1GのNICが何故か100 fullになっていたので切り分けの為にLinux側で1000 full固定設定を しようとしてもコマンドが受け付けず設定できませんでした。
1000BASE-Tにはオートネゴシエーションが必須だからでした。

実施しようとした設定はこちら
デバイスeth0のautonegotiationをoffにする
ethtool -s eth0 autoneg off

デバイスeth0のduplexをfullにする
ethtool -s eth0 duplex full

デバイスeth0のspeedを1000(1Gbps)にする
ethtool -s eth0 speed 1000

↑でコマンドが受け付けられませんでした。

デバイスeth0のspeedを100(100Mbps)にする
ethtool -s eth0 speed 1000

↑こちらはコマンド受け付けられました。

再起動しても設定が反映されるようにするにはネットワークの設定ファイルに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 1000 duplex full”
TYPE=Ethernet

こちらも設定して network restartをしましたが反映されませんでした。

ググっている過程でたまたま1000BASE-Tはautonego必須なのでコマンドを受け付けないという記述を見かけたので
IEEE802.3 の規格を確認することにしました。

wikipediaでギガビット・イーサネット(1000BASE-T)の記述に

1000BASE-Tではイーサネット機器同士の自動認識(オートネゴシエーション)が義務となっており、結線時にファスト・リンク・パルス (FLP) と呼ぶ自動認識用信号を送り出してお互いのスループットや全二重/半二重を教えあい、相手が10BASE-Tや100BASE-TXではノーマル・リンク・パルスとアイドル信号というそれぞれの固有信号形式によって判別して通信設定を行なうことで下位互換性を実現している。1000BASE-T同士の場合はこのFLPをクロック・タイミングの同期の主従決定に利用している。

とありました。

wikipediaは間違っていることもあると思ったので、IEEE802.3の原文を確認することにしました。
free download(95MB)して確認しました。

IEEE Standard for Ethernet
(IEEE Std 802.3-2018)

P740
28D.5 Extensions required for Clause 40 (1000BASE-T)
Clause 40 (1000BASE-T) makes special use of Auto-Negotiation and requires additional MII registers. This
use is summarized below. Details are provided in 40.5.
a) Auto-Negotiation is mandatory for 1000BASE-T (see 40.5.1).

日本語訳(google翻訳)
条項40(1000BASE-T)に必要な拡張機能
条項40(1000BASE-T)は、オートネゴシエーションを特別に使用し、追加のMIIレジスタが必要です。 この
使用方法を以下にまとめます。 詳細は40.5に記載されています。
a)1000BASE-Tにはオートネゴシエーションが必須です(40.5.1を参照)。

1000BASE-Tにはオートネゴシエーションが必須というのは間違い無いことが確認できました。

結局ケーブル交換で1000 full になりました。
ケーブルは新品だったのですが、初期不良ということもあるのですね。

Comments are closed.