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 $
10 .\" Modified, 2004-11-25, mtk, formatting and a few wording fixes
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>
17 .\"WORD load balancing bundle 負荷分散グループ
18 .\"WORD file descriptor ファイルディスクリプタ
21 .TH NETDEVICE 7 2009-01-14 "Linux" "Linux Programmer's Manual"
23 netdevice \- Linux ネットワークデバイスへの低レベルアクセス
25 .B "#include <sys/ioctl.h>"
27 .B "#include <net/if.h>"
29 この man ページでは、ネットワークデバイスを設定するために
30 用いるソケットインターフェースについて解説する。
32 Linux はネットワークデバイスを設定するための標準的な ioctl を
33 いくつか備えている。これらはどんなソケットのファイルディスクリプタにも
34 用いることができる。ファミリーやタイプは何でもよい。
42 char ifr_name[IFNAMSIZ]; /* Interface name */
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;
54 char ifr_slave[IFNAMSIZ];
55 char ifr_newname[IFNAMSIZ];
61 int ifc_len; /* size of buffer */
63 char *ifc_buf; /* buffer address */
64 struct ifreq *ifc_req; /* array of structures */
70 通常、ユーザーによる設定対象デバイスの指定は、
72 にインターフェースの名前をセットすることによって行う。
73 他の構造体の全てのメンバは、メモリを共有する。
75 「特権が必要」と記述されている ioctl を実行するには、
78 権限が必要である。これが満たされていない場合は
91 インターフェースの interface index を取得し、
95 .BR SIOCGIFFLAGS ", " SIOCSIFFLAGS
96 デバイスの active フラグワードを取得または設定する。
106 有効なブロードキャストアドレスがセットされている。
108 IFF_DEBUG:内部のデバッグフラグ。
109 IFF_LOOPBACK:インターフェースはループバックである。
111 インターフェースは point-to-point リンクである。
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:自動メディア選択が有効になっている。
124 このインターフェースが閉じると、アドレスは失われる。
126 IFF_LOWER_UP:ドライバからの L1 アップの通知 (Linux 2.6.17 以降)
127 IFF_DORMANT:ドライバからの休止状態の通知 (Linux 2.6.17 以降)
128 IFF_ECHO:送られたパケットをエコーする (Linux 2.6.25 以降)
132 active フラグワードの設定は特権が必要な操作である。
133 しかし読み出しはどんなプロセスからも可能である。
135 .BR SIOCGIFMETRIC ", " SIOCSIFMETRIC
139 これはまだ実装されていない。読み出そうとすると
141 に 0 をセットして返り、設定しようとすると
145 .BR SIOCGIFMTU ", " SIOCSIFMTU
146 デバイスの MTU (Maximum Transfer Unit) を
148 を用いて取得・設定する。 MTU の設定は特権が必要な操作である。
149 MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
151 .BR SIOCGIFHWADDR ", " SIOCSIFHWADDR
159 には ARPHRD_* デバイスタイプが入り、
161 にはバイト 0 から始まる L2 ハードウェアアドレスが入る。
162 ハードウェアアドレスの設定は特権が必要な操作である。
164 .B SIOCSIFHWBROADCAST
165 デバイスのハードウェアブロードキャストアドレスを
167 の値に設定する。この操作には特権が必要である。
169 .BR SIOCGIFMAP ", " SIOCSIFMAP
170 インターフェースのハードウェアのパラメータを
173 パラメータの設定は特権が必要な操作である。
178 unsigned long mem_start;
179 unsigned long mem_end;
180 unsigned short base_addr;
188 ifmap 構造体の解釈はデバイスドライバとアーキテクチャに依存する。
190 .BR SIOCADDMULTI ", " SIOCDELMULTI
191 デバイスのリンク層のマルチキャストフィルターから、
193 のアドレスを追加・削除する。これらの操作には特権が必要である。
198 .BR SIOCGIFTXQLEN ", " SIOCSIFTXQLEN
201 に取得・設定する。送信キューの長さの設定には特権が必要である。
207 に変更する。この操作には特権が必要である。インターフェースが up していない
211 インターフェース(トランスポート層)アドレスのリストを返す。
214 (IPv4) ファミリーのアドレスのみである。
226 カーネルは ifreqs を現在動作している全ての L3 インターフェースアドレスで埋める。
228 にはインターフェース名 (eth0:1 など) が入り、
236 オーバーフローを起こしている可能性があるので、
237 全てのアドレスを取得するためにより大きなバッファで再試行するべきである。
238 エラーがなかった場合は ioctl は 0 を返す。
241 .\" Slaving isn't supported in 2.2
244 .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
245 .\" Get or set the slave device using
247 .\" Setting the slave device is a privileged operation.
249 .\" FIXME add amateur radio stuff.
251 ほとんどのプロトコルには、専用のインターフェースオプションを
252 設定するための独自の ioctl が存在する。
253 説明は各プロトコルの man ページを見よ。
255 さらに、デバイスによってはプライベートな ioctl がある。
266 フラグがセットされていないインターフェースの名前は
281 とりあえずの対応策として、以下のコードを追加しておくこと。
286 #define ifr_newname ifr_ifru.ifru_slave
293 .BR capabilities (7),