2001 年 5 月 26 日 (土) 三田

久しぶりにますたにラーメンに行く。 やっぱりここでは基本だと思う組み合わせ、 「ラーメン大盛り固めネギ多め」をオーダー。 おいしい。

80x60 thumbnail image

そのあと、コンビニで「ごまだれだんご」というブツを発見。 中から胡麻だれがトローリと出てきます。

80x60 thumbnail image 80x60 thumbnail image

てなことはどうでもよくって、 FreeBSD 4.3-RELEASE のリリースノートで 「VLAN ネットワーキングコードのいくつかの些細なバグを修正しました」 と触れられている IEEE 802.1q VLAN のテストを行いました。 っていうか、以前の 4.1.1-RELEASE の頃の VLAN のコードって (4.2-RELEASE は試していない) 些細なバグどころではなくかなりダメダメで、 パッチなしには MTU が 1496 になってしまって、 VLAN スイッチを経由した通常の Ethernet とお話ができなくなってしまう、 という致命的欠点があったのですが。 ということで、 SysKonnect 社の SK-9844 Dual Gigabit Ethernet カードを持った、 この PC で実験します。

60x80 thumbnail image

config ファイルに次の行を加え、vlan(4) を 16 個 config します。 また、4.3-RELEASE では GENERIC の config に sk ドライバ (SysKonnect Gigabit Ethernet) が含まれていないので、それも足します。

pseudo-device   vlan 16
device          sk

これで起動すると、まずは sk が Gigabit Ethernet を 2 ポート発見し、 次のように起動時に表示されます。

skc0: <SysKonnect Gigabit Ethernet> port 0xb800-0xb8ff mem 0xfc8fc000-0xfc8fffff irq 17 at device 3.0 on pci3
skc0: SysKonnect SK-NET Gigabit Ethernet Adapter SK-9844 SX dual link
sk0: <XaQti Corp. XMAC II> on skc0
sk0: Ethernet address: 00:00:5a:99:4b:5c
miibus0: <MII bus> on sk0
xmphy0: <XaQti Corp. XMAC II gigabit interface> on miibus0
xmphy0:  1000baseSX, 1000baseSX-FDX, auto
sk1: <XaQti Corp. XMAC II> on skc0
sk1: Ethernet address: 00:00:5a:99:4b:5d
miibus1: <MII bus> on sk1
xmphy1: <XaQti Corp. XMAC II gigabit interface> on miibus1
xmphy1:  1000baseSX, 1000baseSX-FDX, auto

ここで ifconfig -aとすると、VLAN に相当するインターフェースが、 次のように表示されます。

vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether 00:00:00:00:00:00 
vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether 00:00:00:00:00:00 
...(略)...
vlan15: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether 00:00:00:00:00:00 

お、MTU 1500 じゃん、素晴らしいと思って、

# ifconfig vlan0 inet 192.168.0.1 netmask 255.255.255.0 vlan 610 vlandev sk1

と叩くと…、残念ながら、

# ifconfig vlan0
vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1496
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::200:5aff:fe99:4b5c%vlan0 prefixlen 64 scopeid 0x5 
        ether 00:00:5a:99:4b:5d 
        vlan: 610 parent interface: sk1

と、MTU が 1496 になってしまう。 ちなみに、parent interface を sk1 ではなく fxp0 にすると、 1500 になってしまったりするので、 やっぱり fxp0 くらいしか FreeBSD の VLAN って使えないのか、 と思って www.FreeBSD.org で freebsd-net ML の記事などを検索すると、 どうも MTU を手動で ifconfig するだけで動くぞ、 と書かれてみました (ちなみに、それは以前 4.0-RELEASE や 4.1.1-RELEASE の頃に試してみて、 見事に敗退していたので、今回は試していなかった)。 ということで、では手動で試してみましょう。

# ifconfig vlan0 inet 192.168.0.1 netmask 255.255.255.0 vlan 610 vlandev sk1 mtu 1500

すると、ついに、次のように表示されました。

# ifconfig vlan0
vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::200:5aff:fe99:4b5c%vlan0 prefixlen 64 scopeid 0x5 
        ether 00:00:5a:99:4b:5d 
        vlan: 610 parent interface: sk1

やったぁ。 試しに、 VLAN スイッチを通して port VLAN に接続した別のマシンと, この VLAN のインターフェースとの間で、 でかいファイルを ftp してみて、 tcpdump でパケット内容を sniff してみると、 ちゃんと TCP のパケットが 1460 バイトになっている。 すばらしい。 そもそも、1496 バイトと 1500 バイトのホスト間では、 正常に ftp できないことは確認済 (しかも以前は無理やり mtu 1500 つけても、実際には通信できなかった)。

これ、誤解でした。 やっぱり送信には何の問題もないけど、 受信はできません。 ちなみに、SysKonnect のチップのデータシートを見ると、 やはり Giant Frame を受け取るビットがあって、 ここを立てないと IEEE 802.1q パケットの受信はハード的に無理らしい。 ちなみに、fxp ドライバでもやっぱり正常に受信は無理でした。 やはりドライバの改善が必要でしょう。うーん。(2001/06/01)

あ、しまった。 外からの GET は試したけど、 外への PUT が正常に MTU が 1460 出来ているか試していない。 月曜にやろう。


このサイトへのリンクには何ら許可は必要ありません。 ただし、無断で写真をダウンロードして他の場所に掲載したり、 画像加工の素材として利用するなど、再配布に当たる行為はしないようにしてください。 また、このサイトへのリンクであることを明示すること無しに <img src="..."> などで他のページの内部に画像ファイルを取り込むことも、 ご遠慮下さい。