日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
NETINTRO(4) FreeBSD カーネルインタフェースマニュアル NETINTRO(4)
名称
networking -- ネットワーク機構の紹介
書式
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/route.h>
解説
このセクションは、システムで利用可能なネットワーク機構の一般的な紹介で
す。セクション 4 のこの部分の文書は、3 つの領域に分割されます: プロトコル
ファミリ (ドメイン), プロトコル, ネットワークインタフェースです。
すべてのネットワークプロトコルは、特定のプロトコルファミリに関連していま
す。プロトコルファミリは、それが特定のネットワーク環境中で機能できるよう
にプロトコルの実装するための基本的なサービスを提供します。これらのサービ
スは、パケットの断片化と再アセンブリ、ルーティング、アドレシングおよび基
本的な転送を含んでいます。現在のプロトコルの実装ではサポートされていませ
んが、プロトコルファミリは、複数のアドレシング方法をサポートします。プロ
トコルファミリは、通常 socket(2) タイプあたり 1 つの多くのプロトコルから
成ります。プロトコルファミリは、すべてのソケットタイプをサポートする必要
はありません。プロトコルファミリは、同じソケットの抽象化をサポートする複
数のプロトコルが含まれています。
プロトコルは、socket(2) で詳細なソケットの抽象化の 1 つをサポートします。
特定のプロトコルは、適切なタイプとプロトコルファミリのソケットを作成すこ
とによって、またはソケットを作成するときはっきりとプロトコルを要求するこ
とによってアクセスすることができます。通常、プロトコルは、プロトコルファ
ミリ/ネットワークアーキテクチャのデザインに固有のアドレシング構造体によっ
て決定する 1 種類のアドレスフォーマットだけを受け付けます。基本的なソケッ
トの抽象化のセマンティクスは、プロトコルに特有です。すべてのプロトコル
は、特定のソケットタイプのための基本モデルをサポートするはずですが、さら
に、標準的でない機構または拡張メカニズムを提供することもあります。例え
ば、SOCK_STREAM 抽象化をサポートするプロトコルは、帯域外メッセージ毎に帯
域外の 1 バイト以上のデータを送信することができます。
ネットワークインタフェースは、デバイスインタフェースに似ています。ネット
ワークインタフェースは、実際の転送ハードウェアと情報をやりとりするネット
ワークサブシステムの最下位層を包括しています。インタフェースは、1 つ以上
のプロトコルファミリおよびアドレスフォーマットをサポートできます。各ネッ
トワークインタフェースのエントリの書式セクションは、config(8) プログラム
にシステム記述を提供する際に使用される関連ドライバのサンプル仕様がありま
す。診断セクションは、コンソールシステムおよびデバイス操作におけるエラー
に起因するシステムエラーログ /var/log/messages (syslogd(8) 参照) に現れる
メッセージをリストアップします
プロトコル
システムは、現在、インターネットプロトコル、Xerox Network Systems(tm) プ
ロトコル、そして ISO OSI プロトコルのいくつかをサポートしています。生
(raw) ソケットインタフェースは、インターネットの IP プロトコル層と、Xerox
NS の IDP プロトコルを提供しています。各プロトコルファミリのサポートに関
する詳しい情報については、このセクションの適切なマニュアルページを参考に
してください。
アドレッシング
各プロトコルファミリに関連づけられているのは、アドレスフォーマットです。
すべてのネットワークアドレスは、以下で説明される sockaddr と呼ばれる一般
的な構造体と結びついています。しかしながら、各プロトコルは、よりすばらし
いより特有の構造体、一般的に上記でそれとなく説明されたプロトコルファミリ
マニュアルページで議論されている変形の名前を変えることを強要します。
struct sockaddr {
u_char sa_len;
u_char sa_family;
char sa_data[14];
};
フィールド sa_len は、構造体の全体の長さを含んでいます。それは、16 バイト
を超えるかもしれません。次の sa_family のためのアドレス値は、システムで既
知です (そして将来の実装するかもしれない追加フォーマットを定義していま
す):
#define AF_UNIX 1 /* ローカルホスト (パイプ、ポータル) */
#define AF_INET 2 /* インターネット: UDP、TCP 等 */
#define AF_NS 6 /* Xerox NS プロトコル */
#define AF_CCITT 10 /* CCITT プロトコル、X.25 等 */
#define AF_HYLINK 15 /* NSC ハイパーチャネル */
#define AF_ISO 18 /* ISO プロトコル */
ルーティング (経路制御)
FreeBSD は、いくつかのパケットルーティング機構を提供します。カーネルは、
ルーティング情報データベースを維持管理しています。それは、パケットを転送
するとき適切なネットワークインタフェースを選択する際に使用されます。
ユーザプロセス (または複数の協調プロセス) は、特別な種類のソケットを通し
てメッセージを送ることによって、このデータベースを維持管理しています。こ
れは、以前のリリースで使用されていた固定サイズの ioctl(2) に取って代わり
ます。
この機構は、route(4) で説明されています。
インタフェース
システム内の各ネットワークインタフェースは、メッセージを送受信できるパス
に対応しています。通常、ネットワークインタフェースは、それに関連している
ハードウェアデバイスがありますが、ループバックインタフェース lo(4) のよう
な特定のインタフェースにはありません。
次の ioctl(2) 呼び出しは、ネットワークインタフェースを操作するために使用
されます。ioctl() は、所望のドメインで (通常、タイプ SOCK_DGRAM の) ソ
ケット上に作られます。以前のリリースでサポートされていた要求の多くは、パ
ラメータとして ifreq 構造を取ります。この構造体は、次の形式です。
struct ifreq {
#define IFNAMSIZ 16
char ifr_name[IFNAMSIZ]; /* if 名, 例えば "en0" */
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct ifreq_buffer ifru_buffer;
short ifru_flags[2];
short ifru_index;
int ifru_metric;
int ifru_mtu;
int ifru_phys;
int ifru_media;
caddr_t ifru_data;
int ifru_cap[2];
} ifr_ifru;
#define ifr_addr ifr_ifru.ifru_addr /* アドレス */
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* p-to-p リンクの別の終 */
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* ブロードキャスト
アドレス */
#define ifr_buffer ifr_ifru.ifru_buffer /* 長さをつけてユーザによ
って供給されるバッファ */
#define ifr_flags ifr_ifru.ifru_flags[0] /* フラグ (下位 16 ビット) */
#define ifr_flagshigh ifr_ifru.ifru_flags[1] /* フラグ (上位 16 ビット) */
#define ifr_metric ifr_ifru.ifru_metric /* メトリック */
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
#define ifr_phys ifr_ifru.ifru_phys /* 物理的な線 */
#define ifr_media ifr_ifru.ifru_media /* 物理的なメデア */
#define ifr_data ifr_ifru.ifru_data /* インタフェースによって
使用 */
#define ifr_reqcap ifr_ifru.ifru_cap[0] /* 要求された
ケーパビリティ */
#define ifr_curcap ifr_ifru.ifru_cap[1] /* 現在のケーパビリティ */
#define ifr_index ifr_ifru.ifru_index /* インタフェース
インデックス */
};
アドレスを取得するための ioctl() 要求と他のデータを設定して検索するための
両方の要求は、まだ完全にサポートされていて、ifreq 構造体を使用します:
SIOCGIFADDR プロトコルファミリのためのインタフェースアドレスを取得し
ます。
SIOCGIFDSTADDR プロトコルファミリとインタフェースのためにポイントツーポ
イントアドレスを取得します。
SIOCGIFBRDADDR プロトコルファミリとインタフェースのためにブロードキャス
トアドレスをを取得します。
SIOCSIFCAP ifreq 構造体の ifr_reqcap フィールドの値へのインタフェー
スのための使用可能とされたケーパビリティフィールドを設定
することを試みます。特定のインタフェースの機能に依存し
て、いくつかのケーパビリティは、使用可能とするために決め
打ちされているように見えるかもしれないか、または、ケーパ
ビリティを切り換えるのは、他のものの状態に影響するかもし
れないことに注意してください。サポートしているケーパビリ
ティフィールドは、読み込み専用で、ifr_curcap フィールド
は、この呼び出しでは未使用です。
SIOCGIFCAP インタフェースケーパビリティフィールドを取得します。サ
ポートされたケーパビリティの値と利用可能なケーパビリティ
の値は、ifreq 構造体の ifr_reqcap と ifr_curcap フィール
ドにそれぞれ返されます。
SIOCGIFDESCR ifru_buffer 構造体の buffer フィードで返された、インタ
フェース記述を取得します。ユーザ供給のバッファの長さは、
パラメータとして渡された ifru_buffer 構造体の length
フィールドで定義されるべきです、そして、長さは、終端のヌ
ル (nul) 文字を含んでいます。インタフェースの長さを保持す
るための空間が十分でないなら、コピーは、行われず、
ifru_buffer の buffer フィールドが、NULL に設定されます。
カーネルは、バッファ自体がデータを保持するために足りるか
どうかに関係なく、返り時に length フィールドにバッファ長
を格納します。
SIOCSIFDESCR (終端のヌル (nul) をカウントして) バッファの長さを指定す
る length フィールドをつけて ifru_buffer 構造体の buffer
フィールドの値にインタフェース記述を設定します。
SIOCSIFFLAGS インタフェースフラグフィールドを設定します。インタフェー
スがダウン (down) とマークされるなら、現在インタフェース
を通してパケットをルーティングしているすべてのプロセスに
通知されます。いくつかのインタフェースは、もはや着信して
くるパケットを受信できないように、リセットされます。再び
アップ (up) とマークされるとき、インタフェースは、再初期
化されます。
SIOCGIFFLAGS インタフェースフラグを取得します。
SIOCSIFMETRIC インタフェースルーティングメトリックを設定します。このメ
トリックは、ユーザレベルのルータによってのみ使用されま
す。
SIOCGIFMETRIC インタフェースメトリックを取得します。
SIOCIFCREATE 指定されたインタフェースを作成することを試みます。ユニッ
ト番号なしでインタフェース名を与えるなら、システムは、任
意のユニット番号で新しいインタフェースを作成することを試
みます。成功すれば新しいインタフェース名を含む ifr_name
フィールドを返します。
SIOCIFDESTROY 指定されたインタフェースを破壊することを試みます。
新しい構造体を使用する 2 つの要求があります:
SIOCAIFADDR インタフェースには、いくつかのプロトコルで 2 つ以上のアド
レスに関連しているかもしれません。この要求は、追加アドレ
スを加える (またはアドレスファミリのためのデフォルトアド
レスが指定されるなら、プライマリアドレスの特性を変更する)
手段を提供します。宛先 (終点) かブロードキャストアドレス
またはネットワークマスク (現在では、複数のプロトコルで不
可欠な特徴) を設定するために別々の呼び出しを行うよりむし
ろ、別々の構造体がすべての 3 つのことがらを同時に指定する
ために使用されています (下記参照)。(各 sockaddr をファミ
リ特有のタイプのひとつに置き換える) 各ファミリのためにこ
の構造体の仕様のわずかに調整されたバージョンを使用するで
しょう。sockaddr 自体がデフォルトサイズより大きい場合は、
ioctl() で説明されるように、合計のサイズを含むように
ioctl() 識別子自体を変更する必要があります。
SIOCDIFADDR この要求は、インタフェースに関連しているリストから指定さ
れたアドレスを削除します。また、要求は、複数のマスクまた
は宛先 (終点) アドレスを許すプロトコルの可能性を考慮した
ifaliasreq 構造体を使用し、同様に、デフォルトアドレスの指
定は、オリジナルのソケットがオープンされたアドレスファミ
リに帰属するインタフェースへの最初のアドレスを削除するこ
とを意味する約束事を採用します。
SIOCGIFALIAS この要求は、インタフェースからネットマスクとブロードキャ
スト/宛先と共に追加のアドレスを取得する手段を提供していま
す。また、それは、ifaliasreq 構造体を使用します。
SIOCGIFCONF インタフェースの設定リストを取得します。この要求は、値結
果 (value-result) パラメータとして ifconf 構造体 (下記参
照) を取ります。ifc_len フィールドは、最初に、ifc_buf に
よって指されたバッファのサイズに設定されるべきです。返る
ときに、そのフィールドには、設定リストの長さをバイト単位
で含みます。
SIOCIFGCLONERS クローン可能 (clonable) インタフェースのリストを取得しま
す。この要求は、値結果 (value-result) パラメータとして
if_clonereq 構造体 (下記参照) を取ります。ifcr_count
フィールドは、ifcr_buffer によって指されるバッファに適合
することができる IFNAMSIZ サイズの文字列の数に設定される
べきです。返るときに、ifcr_total は、クローン可能 (clon
able) インタフェースの数とに設定され、そして、バッファ
は、IFNAMSIZ 境界で整列されたクローン可能インタフェースの
名前が入れられた ifcr_buffer によって指されます。
/*
* SIOCAIFADDR 要求で使用される構造体.
*/
struct ifaliasreq {
char ifra_name[IFNAMSIZ]; /* if 名, 例えば "en0" */
struct sockaddr ifra_addr;
struct sockaddr ifra_broadaddr;
struct sockaddr ifra_mask;
};
/*
* SIOCGIFCONF 要求で使用される構造体.
* マシンのインタフェース設定を検索するために使用
* (アクセス可能なすべてのネットワークを知らなければ
* ならないプログラムに有用).
*/
struct ifconf {
int ifc_len; /* 関連バッファのサイズ */
union {
caddr_t ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu;
#define ifc_buf ifc_ifcu.ifcu_buf /* バッファアドレス */
#define ifc_req ifc_ifcu.ifcu_req /* 返される構造体の配列 */
};
/* SIOCIFGCLONERS 要求で使用される構造体. */
struct if_clonereq {
int ifcr_total; /* クローンナの合計 (出力) */
int ifcr_count; /* ユーザバッファ中の部屋の数 */
char *ifcr_buffer; /* クローンナ名のバッファ */
};
/* SIOCGIFDESCR と SIOCSIFDESCR 要求で使用される構造体 */
struct ifreq_buffer {
size_t length; /* バッファの長さ */
void *buffer; /* ユーザランド空間のバッファへの
ポインタ */
};
関連項目
ioctl(2), socket(2), intro(4), config(8), routed(8), ifnet(9)
歴史
netintro マニュアルページは、4.3BSD-Tahoe で登場しました。
FreeBSD 13.2 October 14, 2020 FreeBSD 13.2