2 .\" Don't change the first line, it tells man that tbl is needed.
3 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
4 .\" Permission is granted to distribute possibly modified copies
5 .\" of this page provided the header is included verbatim,
6 .\" and in case of nontrivial modification author and date
7 .\" of the modification is added to the header.
8 .\" $Id: netdevice.7,v 1.10 2000/08/17 10:09:54 ak Exp $
10 .\" Modified, 2004-11-25, mtk, formatting and a few wording fixes
12 .\"*******************************************************************
14 .\" This file was generated with po4a. Translate the source file.
16 .\"*******************************************************************
17 .TH NETDEVICE 7 2009\-01\-14 Linux "Linux Programmer's Manual"
19 netdevice \- Linux ネットワークデバイスへの低レベルアクセス
21 \fB#include <sys/ioctl.h>\fP
23 \fB#include <net/if.h>\fP
25 この man ページでは、ネットワークデバイスを設定するために 用いるソケットインターフェースについて解説する。
27 Linux はネットワークデバイスを設定するための標準的な ioctl を いくつか備えている。これらはどんなソケットのファイルディスクリプタにも
28 用いることができる。ファミリーやタイプは何でもよい。 これらの ioctl は \fIifreq\fP 構造体を渡す。
33 char ifr_name[IFNAMSIZ]; /* Interface name */
35 struct sockaddr ifr_addr;
36 struct sockaddr ifr_dstaddr;
37 struct sockaddr ifr_broadaddr;
38 struct sockaddr ifr_netmask;
39 struct sockaddr ifr_hwaddr;
45 char ifr_slave[IFNAMSIZ];
46 char ifr_newname[IFNAMSIZ];
52 int ifc_len; /* size of buffer */
54 char *ifc_buf; /* buffer address */
55 struct ifreq *ifc_req; /* array of structures */
61 通常、ユーザーによる設定対象デバイスの指定は、 \fIifr_name\fP にインターフェースの名前をセットすることによって行う。
62 他の構造体の全てのメンバは、メモリを共有する。
64 「特権が必要」と記述されている ioctl を実行するには、 実効ユーザー ID が 0 か、 \fBCAP_NET_ADMIN\fP
65 権限が必要である。これが満たされていない場合は \fBEPERM\fP が返される。
68 \fIifr_ifindex\fP を受け取り、インターフェースの名前を \fIifr_name\fP に入れて返す。これは結果を \fIifr_name\fP
72 インターフェースの interface index を取得し、 \fIifr_ifindex\fP に入れて返す。
74 \fBSIOCGIFFLAGS\fP, \fBSIOCSIFFLAGS\fP
75 デバイスの active フラグワードを取得または設定する。 \fIifr_flags\fP には以下の値のビットマスクが入る。
82 IFF_BROADCAST:有効なブロードキャストアドレスがセットされている。
84 IFF_LOOPBACK:インターフェースはループバックである。
85 IFF_POINTOPOINT:インターフェースは point\-to\-point リンクである。
86 IFF_RUNNING:リソースが割り当て済み。
87 IFF_NOARP:arp プロトコルがない。
88 IFF_PROMISC:インターフェースは promiscuous モードである。
89 IFF_NOTRAILERS:trailer の利用を避ける。
90 IFF_ALLMULTI:全てのマルチキャストパケットを受信する。
91 IFF_MASTER:負荷分散グループのマスターである。
92 IFF_SLAVE:負荷分散グループのスレーブである。
93 IFF_MULTICAST:マルチキャストをサポートしている。
94 IFF_PORTSEL:ifmap によってメディアタイプを選択できる。
95 IFF_AUTOMEDIA:自動メディア選択が有効になっている。
97 このインターフェースが閉じると、アドレスは失われる。
99 IFF_LOWER_UP:ドライバからの L1 アップの通知 (Linux 2.6.17 以降)
100 IFF_DORMANT:ドライバからの休止状態の通知 (Linux 2.6.17 以降)
101 IFF_ECHO:送られたパケットをエコーする (Linux 2.6.25 以降)
105 active フラグワードの設定は特権が必要な操作である。 しかし読み出しはどんなプロセスからも可能である。
107 \fBSIOCGIFMETRIC\fP, \fBSIOCSIFMETRIC\fP
108 デバイスのメトリックを \fIifr_metric\fP を用いて取得・設定する。 これはまだ実装されていない。読み出そうとすると \fIifr_metric\fP
109 に 0 をセットして返り、設定しようとすると \fBEOPNOTSUPP\fP が返る。
111 \fBSIOCGIFMTU\fP, \fBSIOCSIFMTU\fP
112 デバイスの MTU (Maximum Transfer Unit) を \fIifr_mtu\fP を用いて取得・設定する。 MTU
113 の設定は特権が必要な操作である。 MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
115 \fBSIOCGIFHWADDR\fP, \fBSIOCSIFHWADDR\fP
116 デバイスのハードウェアアドレスを \fIifr_hwaddr\fP を用いて取得・設定する。 ハードウェアアドレスは \fIsockaddr\fP
117 構造体に設定される。 \fIsa_family\fP には ARPHRD_* デバイスタイプが入り、 \fIsa_data\fP にはバイト 0 から始まる L2
118 ハードウェアアドレスが入る。 ハードウェアアドレスの設定は特権が必要な操作である。
120 \fBSIOCSIFHWBROADCAST\fP
121 デバイスのハードウェアブロードキャストアドレスを \fIifr_hwaddr\fP の値に設定する。この操作には特権が必要である。
123 \fBSIOCGIFMAP\fP, \fBSIOCSIFMAP\fP
124 インターフェースのハードウェアのパラメータを \fIifr_map\fP を用いて取得・設定する。 パラメータの設定は特権が必要な操作である。
129 unsigned long mem_start;
130 unsigned long mem_end;
131 unsigned short base_addr;
139 ifmap 構造体の解釈はデバイスドライバとアーキテクチャに依存する。
141 \fBSIOCADDMULTI\fP, \fBSIOCDELMULTI\fP
142 デバイスのリンク層のマルチキャストフィルターから、 \fIifr_hwaddr\fP のアドレスを追加・削除する。これらの操作には特権が必要である。
143 別の方法が \fBpacket\fP(7) で解説されている。
145 \fBSIOCGIFTXQLEN\fP, \fBSIOCSIFTXQLEN\fP
146 デバイスの送信キューの長さを \fIifr_qlen\fP に取得・設定する。送信キューの長さの設定には特権が必要である。
149 \fIifr_name\fP で指定したインターフェースの名前を \fIifr_newname\fP に変更する。この操作には特権が必要である。インターフェースが
153 .\" Slaving isn't supported in 2.2
156 .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
157 .\" Get or set the slave device using
159 .\" Setting the slave device is a privileged operation.
161 .\" FIXME add amateur radio stuff.
162 インターフェース(トランスポート層)アドレスのリストを返す。 現在のところ、互換性のために \fBAF_INET\fP (IPv4)
163 ファミリーのアドレスのみである。 ユーザーは \fIifconf\fP 構造体を ioctl の引数として渡す。 \fIifconf\fP 構造体には、
164 \fIifreq\fP 構造体の配列へのポインタである \fIifc_req\fP と、バイト単位の配列の長さを指定する \fIifc_len\fP が含まれる。
165 カーネルは ifreqs を現在動作している全ての L3 インターフェースアドレスで埋める。 \fIifr_name\fP にはインターフェース名
166 (eth0:1 など) が入り、 \fIifr_addr\fP にはアドレスが入る。 カーネルは実際の長さを \fIifc_len\fP に返す。
167 \fIifc_len\fP が元のバッファの長さと同じだった場合、 オーバーフローを起こしている可能性があるので、
168 全てのアドレスを取得するためにより大きなバッファで再試行するべきである。 エラーがなかった場合は ioctl は 0 を返す。 エラーがあった場合は
169 \-1 を返す。 オーバーフローはエラーとは見なされない。
171 ほとんどのプロトコルには、専用のインターフェースオプションを 設定するための独自の ioctl が存在する。 説明は各プロトコルの man
174 さらに、デバイスによってはプライベートな ioctl がある。 これらはここでは説明しない。
176 厳密にいうと、 \fBSIOCGIFCONF\fP は IP 固有であり、 \fBip\fP(7) に属する。
178 アドレスがなかったり、 \fBIFF_RUNNING\fP フラグがセットされていないインターフェースの名前は \fI/proc/net/dev\fP
181 ローカル IPV6 IP アドレスは \fI/proc/net\fP か \fBrtnetlink\fP(7) で知ることができる。
183 glibc 2.1 では \fI<net/if.h>\fP に \fIifr_newname\fP マクロがない。
184 とりあえずの対応策として、以下のコードを追加しておくこと。
189 #define ifr_newname ifr_ifru.ifru_slave
194 \fBproc\fP(5), \fBcapabilities\fP(7), \fBip\fP(7), \fBrtnetlink\fP(7)