Linuxとネットワーク(2)
前回に続き、GNU/Linuxカーネルのネットワーク関連機能について解説する。
GNU/Linuxのデバイス・ドライバは、プリンタなどに用いるキャラクタ型のほか、ハード・ディスク装置などに用いるブロック型、ネットワーク・ドライバの3つに大別される。ただし、ネットワーク・ドライバのみ、ほかのドライバとは仕組みが異なる。
キャラクタ型やブロック型の場合、デバイス・ドライバと実際の装置の関係は1対1である。本誌の2008年12月号で解説したように、例えば「/dev/xxxx」という名称のデバイス・スペシャル・ファイルを使用することで、該当する装置とデバイス・ドライバを識別できる。しかし、ネットワーク・ドライバの場合、/dev/xxxxという形のデバイス・スペシャル・ファイルは存在しない。では、どのようにしてネットワーク装置を呼び出すのだろうか。
ネットワーク・インターフェースと呼ばれる特別なファイルを用いる。例えば、有線LANであればeth0、無線LANではwlan0などというインターフェース名が用意されており、ネットワーク・チップが2個以上実装されていれば、末尾の番号で区別する。例えば、eth1、eth2、…などとなる。このインターフェース名は、「/etc/sysconfig/hwconf」ファイルで管理されており、各種の設定を変更できる(図1)。

IPアドレスの取得方法や起動タイミングなど、各ネットワーク・インターフェース固有の設定は、「/etc/sysconfig/network-scripts/ifcfg-eth0」ファイル内に記述する。
ネットワーク装置を使用する際は、「/sbin/ifup」コマンドを用いて、次のように起動する。
/sbin/ifup eth0
起動後は、/sbin/ifconfigコマンドを使用すれば、インターフェース名や、割り当てられているIPアドレスなどを表示できる(図2)。

キャラクタ型やブロック型の場合、file_operation構造体の内部にread、write、ioctlなど、デバイス・ドライバ内部に実装された関数へのポインタを含む。しかし、ネットワーク・ドライバの場合、file_operation構造体やこれらの関数は存在しない。代わりに、net_device構造体が定義されており、open、closeのほか、パケット送信用の関数(hard_start_xmitなど)が登録されている。
このため、パケット送信時は、write関数ではなくhard_start_xmit関数を呼び出す。パケットの受信時は割り込みが入るため、read関数ではなく、割り込み処理関数が呼ばれるのである。
Linuxカーネルの最新情報
2009年5月末現在のLinuxカーネルの最新情報を紹介する(表1)。

前回から1カ月の間に、バージョン2.6.29に対して2度の修正リリースが公開された。バージョン2.6.29.4での変更点の一部を表2に示す。

バージョン2.6.29.3では、PowerPCにおけるシグナルの修正、米Intel社のネットワーク・プロセッサ「IXP4xx」用デバイス・ドライバの修正、米Atheros Communications社の無線LANチップ「AR928x」用ドライバの修正、ファイル・システムの修正などが施された。
バージョン2.6.29.4には、ほとんど機能の追加がなく、アーキテクチャに関する修正も見られなかった。ほぼ純粋な修正リリースであるといってもよいほどである。その中で目立ったのは、page_mkwrite関数の不具合の修正だった。この修正によりコンピュータ・クラスタなどに用いるGFS2(Global File System 2)ファイル・システム、ネットワーク・ファイル・システム、メモリー管理など多くの機能にも修正が反映された。
GNU/Linuxカーネルはモノリシック・カーネルであるため、このように1つの不具合が多くの機能に影響を与えることが少なくない。直接の影響がなくても、間接的に影響を及ぼす場合もある。このため、常に最新版の内容を確認し、すでに出荷を開始した製品や開発中の製品に関連する問題がないか、見極める必要がある。
PR











