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マスターモードを設定する汎用的なサポートが追加されたことも紹介されています。