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 .\" Modified, 2011-11-02, <bidulock@openss7.org>, added many basic
13 .\" but missing ioctls, such as SIOCGIFADDR.
15 .\"*******************************************************************
17 .\" This file was generated with po4a. Translate the source file.
19 .\"*******************************************************************
20 .TH NETDEVICE 7 2012\-04\-26 Linux "Linux Programmer's Manual"
22 netdevice \- Linux ネットワークデバイスへの低レベルアクセス
24 \fB#include <sys/ioctl.h>\fP
26 \fB#include <net/if.h>\fP
28 この man ページでは、ネットワークデバイスを設定するために 用いるソケットインターフェースについて解説する。
30 Linux はネットワークデバイスを設定するための標準的な ioctl を いくつか備えている。これらはどんなソケットのファイルディスクリプタにも
31 用いることができる。ファミリーやタイプは何でもよい。 これらの ioctl は \fIifreq\fP 構造体を渡す。
36 char ifr_name[IFNAMSIZ]; /* Interface name */
38 struct sockaddr ifr_addr;
39 struct sockaddr ifr_dstaddr;
40 struct sockaddr ifr_broadaddr;
41 struct sockaddr ifr_netmask;
42 struct sockaddr ifr_hwaddr;
48 char ifr_slave[IFNAMSIZ];
49 char ifr_newname[IFNAMSIZ];
55 int ifc_len; /* size of buffer */
57 char *ifc_buf; /* buffer address */
58 struct ifreq *ifc_req; /* array of structures */
64 通常、ユーザーによる設定対象デバイスの指定は、 \fIifr_name\fP にインターフェースの名前をセットすることによって行う。
65 他の構造体の全てのメンバは、メモリを共有する。
67 「特権が必要」と記述されている ioctl を実行するには、 実効ユーザー ID が 0 か、 \fBCAP_NET_ADMIN\fP
68 権限が必要である。これが満たされていない場合は \fBEPERM\fP が返される。
71 \fIifr_ifindex\fP を受け取り、インターフェースの名前を \fIifr_name\fP に入れて返す。これは結果を \fIifr_name\fP
75 インターフェースの interface index を取得し、 \fIifr_ifindex\fP に入れて返す。
77 \fBSIOCGIFFLAGS\fP, \fBSIOCSIFFLAGS\fP
78 デバイスの active フラグワードを取得または設定する。 \fIifr_flags\fP には以下の値のビットマスクが入る。
85 IFF_BROADCAST:有効なブロードキャストアドレスがセットされている。
87 IFF_LOOPBACK:インターフェースはループバックである。
88 IFF_POINTOPOINT:インターフェースは point\-to\-point リンクである。
89 IFF_RUNNING:リソースが割り当て済み。
90 IFF_NOARP:arp プロトコルがない。
91 IFF_PROMISC:インターフェースは promiscuous モードである。
92 IFF_NOTRAILERS:trailer の利用を避ける。
93 IFF_ALLMULTI:全てのマルチキャストパケットを受信する。
94 IFF_MASTER:負荷分散グループのマスターである。
95 IFF_SLAVE:負荷分散グループのスレーブである。
96 IFF_MULTICAST:マルチキャストをサポートしている。
97 IFF_PORTSEL:ifmap によってメディアタイプを選択できる。
98 IFF_AUTOMEDIA:自動メディア選択が有効になっている。
100 このインターフェースが閉じると、アドレスは失われる。
102 IFF_LOWER_UP:ドライバからの L1 アップの通知 (Linux 2.6.17 以降)
103 IFF_DORMANT:ドライバからの休止状態の通知 (Linux 2.6.17 以降)
104 IFF_ECHO:送られたパケットをエコーする (Linux 2.6.25 以降)
108 active フラグワードの設定は特権が必要な操作である。
109 読み出しはどんなプロセスからも可能である。
111 \fBSIOCGIFPFLAGS\fP, \fBSIOCSIFPFLAGS\fP
112 デバイスの拡張 (プライベート) フラグを取得または設定する。
113 \fIifr_flags\fP には以下の値のビットマスクが入る。
119 IFF_802_1Q_VLAN:インターフェースは 802.1Q VLAN デバイスである。
120 IFF_EBRIDGE:インターフェースは Ethernet ブリッジデバイスである。
121 IFF_SLAVE_INACTIVE:インターフェースは非アクティブな bonding のスレーブである。
122 IFF_MASTER_8023AD:インターフェースは 802.3ad bonding のマスターである。
123 IFF_MASTER_ALB:インターフェースは balanced\-alb bonding のマスターである。
124 IFF_BONDING:インターフェースは bonding のマスターかスレーブである。
125 IFF_SLAVE_NEEDARP:インターフェースは検証に APR が必要である。
126 IFF_ISATAP:インターフェースは RFC4214 ISATAP インターフェースである。
129 拡張 (プライベート) インターフェースフラグの設定には特権が必要である。
131 \fBSIOCGIFADDR\fP, \fBSIOCSIFADDR\fP
132 \fIifr_addr\fP を用いてデバイスのアドレスの設定/取得を行う。
133 インターフェースのアドレスの設定は特権が必要な操作である。
134 互換性確保のため、設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
136 \fBSIOCGIFDSTADDR\fP, \fBSIOCSIFDSTADDR\fP
137 point\-to\-point デバイスの宛先アドレスを \fIifr_dstaddr\fP を用いて
139 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
140 宛先アドレスの設定は特権が必要な操作である。
142 \fBSIOCGIFBRDADDR\fP, \fBSIOCSIFBRDADDR\fP
143 デバイスのブロードキャストアドレスを \fIifr_brdaddr\fP を用いて
145 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
146 ブロードキャストアドレスの設定は特権が必要な操作である。
148 \fBSIOCGIFNETMASK\fP, \fBSIOCSIFNETMASK\fP
149 デバイスのネットワークマスクを \fIifr_netmask\fP を用いて
151 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
152 ネットワークマスクの設定は特権が必要な操作である。
154 \fBSIOCGIFMETRIC\fP, \fBSIOCSIFMETRIC\fP
155 デバイスのメトリックを \fIifr_metric\fP を用いて取得・設定する。 これはまだ実装されていない。読み出そうとすると \fIifr_metric\fP
156 に 0 をセットして返り、設定しようとすると \fBEOPNOTSUPP\fP が返る。
158 \fBSIOCGIFMTU\fP, \fBSIOCSIFMTU\fP
159 デバイスの MTU (Maximum Transfer Unit) を \fIifr_mtu\fP を用いて取得・設定する。 MTU
160 の設定は特権が必要な操作である。 MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
162 \fBSIOCGIFHWADDR\fP, \fBSIOCSIFHWADDR\fP
163 デバイスのハードウェアアドレスを \fIifr_hwaddr\fP を用いて取得・設定する。 ハードウェアアドレスは \fIsockaddr\fP
164 構造体に設定される。 \fIsa_family\fP には ARPHRD_* デバイスタイプが入り、 \fIsa_data\fP にはバイト 0 から始まる L2
165 ハードウェアアドレスが入る。 ハードウェアアドレスの設定は特権が必要な操作である。
167 \fBSIOCSIFHWBROADCAST\fP
168 デバイスのハードウェアブロードキャストアドレスを \fIifr_hwaddr\fP の値に設定する。この操作には特権が必要である。
170 \fBSIOCGIFMAP\fP, \fBSIOCSIFMAP\fP
171 インターフェースのハードウェアのパラメータを \fIifr_map\fP を用いて取得・設定する。 パラメータの設定は特権が必要な操作である。
176 unsigned long mem_start;
177 unsigned long mem_end;
178 unsigned short base_addr;
186 ifmap 構造体の解釈はデバイスドライバとアーキテクチャに依存する。
188 \fBSIOCADDMULTI\fP, \fBSIOCDELMULTI\fP
189 デバイスのリンク層のマルチキャストフィルターから、 \fIifr_hwaddr\fP のアドレスを追加・削除する。これらの操作には特権が必要である。
190 別の方法が \fBpacket\fP(7) で解説されている。
192 \fBSIOCGIFTXQLEN\fP, \fBSIOCSIFTXQLEN\fP
193 デバイスの送信キューの長さを \fIifr_qlen\fP に取得・設定する。送信キューの長さの設定には特権が必要である。
196 \fIifr_name\fP で指定したインターフェースの名前を \fIifr_newname\fP に変更する。この操作には特権が必要である。インターフェースが
200 .\" Slaving isn't supported in 2.2
203 .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
204 .\" Get or set the slave device using
206 .\" Setting the slave device is a privileged operation.
208 .\" FIXME add amateur radio stuff.
209 インターフェース(トランスポート層)アドレスのリストを返す。 現在のところ、互換性のために \fBAF_INET\fP (IPv4)
210 ファミリーのアドレスのみである。 ユーザーは \fIifconf\fP 構造体を ioctl の引数として渡す。 \fIifconf\fP 構造体には、
211 \fIifreq\fP 構造体の配列へのポインタである \fIifc_req\fP と、バイト単位の配列の長さを指定する \fIifc_len\fP が含まれる。
212 カーネルは ifreqs を現在動作している全ての L3 インターフェースアドレスで埋める。 \fIifr_name\fP にはインターフェース名
213 (eth0:1 など) が入り、 \fIifr_addr\fP にはアドレスが入る。 カーネルは実際の長さを \fIifc_len\fP に返す。
214 \fIifc_len\fP が元のバッファの長さと同じだった場合、 オーバーフローを起こしている可能性があるので、
215 全てのアドレスを取得するためにより大きなバッファで再試行するべきである。 エラーがなかった場合は ioctl は 0 を返す。 エラーがあった場合は
216 \-1 を返す。 オーバーフローはエラーとは見なされない。
218 ほとんどのプロトコルには、専用のインターフェースオプションを 設定するための独自の ioctl が存在する。 説明は各プロトコルの man
221 さらに、デバイスによってはプライベートな ioctl がある。 これらはここでは説明しない。
223 厳密にいうと、 \fBSIOCGIFCONF\fP や、 \fBAF_INET\fP ソケットアドレスだけを
224 引き数に取ったり返したりする他の ioctl は IP 固有であり、 \fBip\fP(7)
227 アドレスがなかったり、 \fBIFF_RUNNING\fP フラグがセットされていないインターフェースの名前は \fI/proc/net/dev\fP
230 ローカル IPV6 IP アドレスは \fI/proc/net\fP か \fBrtnetlink\fP(7) で知ることができる。
232 glibc 2.1 では \fI<net/if.h>\fP に \fIifr_newname\fP マクロがない。
233 とりあえずの対応策として、以下のコードを追加しておくこと。
238 #define ifr_newname ifr_ifru.ifru_slave
243 \fBproc\fP(5), \fBcapabilities\fP(7), \fBip\fP(7), \fBrtnetlink\fP(7)
245 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部
246 である。プロジェクトの説明とバグ報告に関する情報は
247 http://www.kernel.org/doc/man\-pages/ に書かれている。