OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man7 / netdevice.7
1 '\" t
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 2001/08/15 18:01:06 hanataka Exp $
9 .\"
10 .\" Modified, 2004-11-25, mtk, formatting and a few wording fixes
11 .\"
12 .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
13 .\" Translated Mon 6 Dec 1999 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
14 .\" Updated Wed 14 Feb 2001 by Kentaro Shirakata <argrath@ub32.org>
15 .\" Updated 2009-02-12 by Kentaro Shirakata <argrath@ub32.org>
16 .\"
17 .\"WORD         load balancing bundle   負荷分散グループ
18 .\"WORD         file descriptor         ファイルディスクリプタ
19 .\"WORD         capability              権限
20 .\"
21 .TH NETDEVICE  7 2009-01-14 "Linux" "Linux Programmer's Manual"
22 .SH 名前
23 netdevice \- Linux ネットワークデバイスへの低レベルアクセス
24 .SH 書式
25 .B "#include <sys/ioctl.h>"
26 .br
27 .B "#include <net/if.h>"
28 .SH 説明
29 この man ページでは、ネットワークデバイスを設定するために
30 用いるソケットインターフェースについて解説する。
31
32 Linux はネットワークデバイスを設定するための標準的な ioctl を
33 いくつか備えている。これらはどんなソケットのファイルディスクリプタにも
34 用いることができる。ファミリーやタイプは何でもよい。
35 これらの ioctl は
36 .I ifreq
37 構造体を渡す。
38
39 .in +4n
40 .nf
41 struct ifreq {
42     char ifr_name[IFNAMSIZ]; /* Interface name */
43     union {
44         struct sockaddr ifr_addr;
45         struct sockaddr ifr_dstaddr;
46         struct sockaddr ifr_broadaddr;
47         struct sockaddr ifr_netmask;
48         struct sockaddr ifr_hwaddr;
49         short           ifr_flags;
50         int             ifr_ifindex;
51         int             ifr_metric;
52         int             ifr_mtu;
53         struct ifmap    ifr_map;
54         char            ifr_slave[IFNAMSIZ];
55         char            ifr_newname[IFNAMSIZ];
56         char           *ifr_data;
57     };
58 };
59
60 struct ifconf {
61     int                 ifc_len; /* size of buffer */
62     union {
63         char           *ifc_buf; /* buffer address */
64         struct ifreq   *ifc_req; /* array of structures */
65     };
66 };
67 .fi
68 .in
69
70 通常、ユーザーによる設定対象デバイスの指定は、
71 .I ifr_name
72 にインターフェースの名前をセットすることによって行う。
73 他の構造体の全てのメンバは、メモリを共有する。
74 .SS ioctl
75 「特権が必要」と記述されている ioctl を実行するには、
76 実効ユーザー ID が 0 か、
77 .B CAP_NET_ADMIN
78 権限が必要である。これが満たされていない場合は
79 .B EPERM
80 が返される。
81 .TP
82 .B SIOCGIFNAME
83 .I ifr_ifindex
84 を受け取り、インターフェースの名前を
85 .I ifr_name
86 に入れて返す。これは結果を
87 .I ifr_name
88 として返す唯一の ioctl である。
89 .TP
90 .B SIOCGIFINDEX
91 インターフェースの interface index を取得し、
92 .I ifr_ifindex
93 に入れて返す。
94 .TP
95 .BR SIOCGIFFLAGS ", " SIOCSIFFLAGS
96 デバイスの active フラグワードを取得または設定する。
97 .I ifr_flags
98 には以下の値のビットマスクが入る。
99 .TS
100 tab(:);
101 c s
102 l l.
103 デバイスフラグ
104 IFF_UP:インターフェースは動作中。
105 IFF_BROADCAST:T{
106 有効なブロードキャストアドレスがセットされている。
107 T}
108 IFF_DEBUG:内部のデバッグフラグ。
109 IFF_LOOPBACK:インターフェースはループバックである。
110 IFF_POINTOPOINT:T{
111 インターフェースは point-to-point リンクである。
112 T}
113 IFF_RUNNING:リソースが割り当て済み。
114 IFF_NOARP:arp プロトコルがない。
115 IFF_PROMISC:インターフェースは promiscuous モードである。
116 IFF_NOTRAILERS:trailer の利用を避ける。
117 IFF_ALLMULTI:全てのマルチキャストパケットを受信する。
118 IFF_MASTER:負荷分散グループのマスターである。
119 IFF_SLAVE:負荷分散グループのスレーブである。
120 IFF_MULTICAST:マルチキャストをサポートしている。
121 IFF_PORTSEL:ifmap によってメディアタイプを選択できる。
122 IFF_AUTOMEDIA:自動メディア選択が有効になっている。
123 IFF_DYNAMIC:T{
124 このインターフェースが閉じると、アドレスは失われる。
125 T}
126 IFF_LOWER_UP:ドライバからの L1 アップの通知 (Linux 2.6.17 以降)
127 IFF_DORMANT:ドライバからの休止状態の通知 (Linux 2.6.17 以降)
128 IFF_ECHO:送られたパケットをエコーする (Linux 2.6.25 以降)
129
130
131 .TE
132 active フラグワードの設定は特権が必要な操作である。
133 しかし読み出しはどんなプロセスからも可能である。
134 .TP
135 .BR SIOCGIFMETRIC ", " SIOCSIFMETRIC
136 デバイスのメトリックを
137 .I ifr_metric
138 を用いて取得・設定する。
139 これはまだ実装されていない。読み出そうとすると
140 .I ifr_metric
141 に 0 をセットして返り、設定しようとすると
142 .B EOPNOTSUPP
143 が返る。
144 .TP
145 .BR SIOCGIFMTU ", " SIOCSIFMTU
146 デバイスの MTU (Maximum Transfer Unit) を
147 .I ifr_mtu
148 を用いて取得・設定する。 MTU の設定は特権が必要な操作である。
149 MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
150 .TP
151 .BR SIOCGIFHWADDR ", " SIOCSIFHWADDR
152 デバイスのハードウェアアドレスを
153 .I ifr_hwaddr
154 を用いて取得・設定する。
155 ハードウェアアドレスは
156 .I sockaddr
157 構造体に設定される。
158 .I sa_family
159 には ARPHRD_* デバイスタイプが入り、
160 .I sa_data
161 にはバイト 0 から始まる L2 ハードウェアアドレスが入る。
162 ハードウェアアドレスの設定は特権が必要な操作である。
163 .TP
164 .B SIOCSIFHWBROADCAST
165 デバイスのハードウェアブロードキャストアドレスを
166 .I ifr_hwaddr
167 の値に設定する。この操作には特権が必要である。
168 .TP
169 .BR SIOCGIFMAP ", " SIOCSIFMAP
170 インターフェースのハードウェアのパラメータを
171 .I ifr_map
172 を用いて取得・設定する。
173 パラメータの設定は特権が必要な操作である。
174
175 .in +4n
176 .nf
177 struct ifmap {
178     unsigned long   mem_start;
179     unsigned long   mem_end;
180     unsigned short  base_addr;
181     unsigned char   irq;
182     unsigned char   dma;
183     unsigned char   port;
184 };
185 .fi
186 .in
187
188 ifmap 構造体の解釈はデバイスドライバとアーキテクチャに依存する。
189 .TP
190 .BR SIOCADDMULTI ", " SIOCDELMULTI
191 デバイスのリンク層のマルチキャストフィルターから、
192 .I ifr_hwaddr
193 のアドレスを追加・削除する。これらの操作には特権が必要である。
194 別の方法が
195 .BR packet (7)
196 で解説されている。
197 .TP
198 .BR SIOCGIFTXQLEN ", " SIOCSIFTXQLEN
199 デバイスの送信キューの長さを
200 .I ifr_qlen
201 に取得・設定する。送信キューの長さの設定には特権が必要である。
202 .TP
203 .B SIOCSIFNAME
204 .I ifr_name
205 で指定したインターフェースの名前を
206 .I ifr_newname
207 に変更する。この操作には特権が必要である。インターフェースが up していない
208 時にのみ使用できる。
209 .TP
210 .B SIOCGIFCONF
211 インターフェース(トランスポート層)アドレスのリストを返す。
212 現在のところ、互換性のために
213 .B AF_INET
214 (IPv4) ファミリーのアドレスのみである。
215 ユーザーは
216 .I ifconf
217 構造体を ioctl の引数として渡す。
218 .I ifconf
219 構造体には、
220 .I ifreq
221 構造体の配列へのポインタである
222 .I ifc_req
223 と、バイト単位の配列の長さを指定する
224 .I ifc_len
225 が含まれる。
226 カーネルは ifreqs を現在動作している全ての L3 インターフェースアドレスで埋める。
227 .I ifr_name
228 にはインターフェース名 (eth0:1 など) が入り、
229 .I ifr_addr
230 にはアドレスが入る。
231 カーネルは実際の長さを
232 .I ifc_len
233 に返す。
234 .I ifc_len
235 が元のバッファの長さと同じだった場合、
236 オーバーフローを起こしている可能性があるので、
237 全てのアドレスを取得するためにより大きなバッファで再試行するべきである。
238 エラーがなかった場合は ioctl は 0 を返す。
239 エラーがあった場合は \-1 を返す。
240 オーバーフローはエラーとは見なされない。
241 .\" Slaving isn't supported in 2.2
242 .\" .
243 .\" .TP
244 .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
245 .\" Get or set the slave device using
246 .\" .IR ifr_slave .
247 .\" Setting the slave device is a privileged operation.
248 .\" .PP
249 .\" FIXME add amateur radio stuff.
250 .PP
251 ほとんどのプロトコルには、専用のインターフェースオプションを
252 設定するための独自の ioctl が存在する。
253 説明は各プロトコルの man ページを見よ。
254 .PP
255 さらに、デバイスによってはプライベートな ioctl がある。
256 これらはここでは説明しない。
257 .SH 注意
258 厳密にいうと、
259 .B SIOCGIFCONF
260 は IP 固有であり、
261 .BR ip (7)
262 に属する。
263 .LP
264 アドレスがなかったり、
265 .B IFF_RUNNING
266 フラグがセットされていないインターフェースの名前は
267 .I /proc/net/dev
268 で知ることができる。
269 .LP
270 ローカル IPV6 IP アドレスは
271 .I /proc/net
272
273 .BR rtnetlink (7)
274 で知ることができる。
275 .SH バグ
276 glibc 2.1 では
277 .I <net/if.h>
278
279 .I ifr_newname
280 マクロがない。
281 とりあえずの対応策として、以下のコードを追加しておくこと。
282 .sp
283 .in +4n
284 .nf
285 #ifndef ifr_newname
286 #define ifr_newname     ifr_ifru.ifru_slave
287 #endif
288 .fi
289 .in
290 .RE
291 .SH 関連項目
292 .BR proc (5),
293 .BR capabilities (7),
294 .BR ip (7),
295 .BR rtnetlink (7)