FreeBSD Daily Topics

2011年4月8日Generic IEEE 802.3最新動向

2010Q4 FreeBSD Status Reportが公開されました。報告されている中から興味深い話題を紹介します。

Generic IEEE 802.3 annex 31B full duplex flow control support for Ethernet in mii(4)

Marius Strobl氏がmii(4)にNetBSD互換のmii_attach()機能を追加したことを報告しています。mii_attach()が追加されたことで関連するデバイスドライバからハック的なコードが排除されたほか、コードのクリンナップが実現されたと説明されています。

mii_attach()を追加することでコードの見通しがよくなったということですが、これは副次的な効果で、もともとはIEEE 802.3 annex 31B全二重フロー制御の汎用的な枠組みを実現する目的で導入された機能とのことです。

mii_attach()追加後にはbge(4)、bce(4)、msk(4)、nfe(4)、stge(4)、brgphy(4)、e1000phy(4)、ip1000phy(4)がこの汎用的な枠組みを使うようにコーディングが変更された他、最終的にalc(4)、fxp(4)、cas(4)、gem(4)、jme(4)、re(4)、xl(4)、atphy(4)、bmtphy(4)、gentbi(4)、inphy(4)、jmphy(4)、nsgphy(4)、nsphyter(4)、rgephy(4)もこの汎用的な枠組みを使うように変更が実施されたと紹介されています。

これまではドライバごとに全二重フロー制御の機能を実装していましたが、今後は汎用的な枠組みを通じて利用できるようになります。結果的に、ifconfig(8)から同一の操作で全二重フロー制御の有効/無効を設定できるようになります。たとえば、次のようなre0デバイスがあるとします。

ifconfig(8)でre0デバイスドライバの情報を表示
% ifconfig re0
re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:1f:d0:d3:e3:34
        inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::21f:d0ff:fed3:e334%re0 prefixlen 64 scopeid 0x5 
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
%
ifconfig(8)に「-m」オプションを指定するとサポートしているメディアが表示されるようになる
% ifconfig -m re0
re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        capabilities=399b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:1f:d0:d3:e3:34
        inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::21f:d0ff:fed3:e334%re0 prefixlen 64 scopeid 0x5 
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        supported media:
                media autoselect mediaopt flowcontrol
                media autoselect
                media 1000baseT mediaopt full-duplex,flowcontrol,master
                media 1000baseT mediaopt full-duplex,flowcontrol
                media 1000baseT mediaopt full-duplex,master
                media 1000baseT mediaopt full-duplex
                media 1000baseT mediaopt master
                media 1000baseT
                media 100baseTX mediaopt full-duplex,flowcontrol
                media 100baseTX mediaopt full-duplex
                media 100baseTX
                media 10baseT/UTP mediaopt full-duplex,flowcontrol
                media 10baseT/UTP mediaopt full-duplex
                media 10baseT/UTP
                media none
%

次のようにifconfig(8)を使うことで全二重フロー制御の有効化および無効化の操作ができます。全二重フロー制御はデフォルトでは無効化されています。これは想定していない問題が発生することを防ぐためです。

ifconfig(8)で全二重フロー制御を有効化する例
# ifconfig re0 media autoselect mediaopt flowcontrol
ifconfig(8)で全二重フロー制御を無効化する例
# ifconfig re0 media autoselect -mediaopt flowcontrol

全二重フロー制御が有効化されると、ifconfig(8)で表示されるデータに「<flowcontrol> (100baseTX <full-duplex,flowcontrol,rxpause,txpause>」といった項目が追加されていることを確認できます。

全二重フロー制御が有効化されたre0
% ifconfig re0
re0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:1f:d0:d3:e3:34
        inet 192.168.1.101 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::21f:d0ff:fed3:e334%re0 prefixlen 64 scopeid 0x5 
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect <flowcontrol> (100baseTX <full-duplex,flowcontrol,rxpause,txpause>)
        status: active
%

この他、mediaオプション経由で1000baseTマスターモードを設定する汎用的なサポートが追加されたことも紹介されています。

おすすめ記事

記事・ニュース一覧