2 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
4 .\" %%%LICENSE_START(VERBATIM_ONE_PARA)
5 .\" Permission is granted to distribute possibly modified copies
6 .\" of this page provided the header is included verbatim,
7 .\" and in case of nontrivial modification author and date
8 .\" of the modification is added to the header.
11 .\" $Id: netdevice.7,v 1.10 2000/08/17 10:09:54 ak Exp $
13 .\" Modified, 2004-11-25, mtk, formatting and a few wording fixes
15 .\" Modified, 2011-11-02, <bidulock@openss7.org>, added many basic
16 .\" but missing ioctls, such as SIOCGIFADDR.
18 .\"*******************************************************************
20 .\" This file was generated with po4a. Translate the source file.
22 .\"*******************************************************************
23 .TH NETDEVICE 7 2012\-04\-26 Linux "Linux Programmer's Manual"
25 netdevice \- Linux ネットワークデバイスへの低レベルアクセス
27 \fB#include <sys/ioctl.h>\fP
29 \fB#include <net/if.h>\fP
31 この man ページでは、ネットワークデバイスを設定するために 用いるソケットインターフェースについて解説する。
33 Linux はネットワークデバイスを設定するための標準的な ioctl を いくつか備えている。これらはどんなソケットのファイルディスクリプタにも
34 用いることができる。ファミリーやタイプは何でもよい。 これらの ioctl は \fIifreq\fP 構造体を渡す。
39 char ifr_name[IFNAMSIZ]; /* Interface name */
41 struct sockaddr ifr_addr;
42 struct sockaddr ifr_dstaddr;
43 struct sockaddr ifr_broadaddr;
44 struct sockaddr ifr_netmask;
45 struct sockaddr ifr_hwaddr;
51 char ifr_slave[IFNAMSIZ];
52 char ifr_newname[IFNAMSIZ];
58 int ifc_len; /* size of buffer */
60 char *ifc_buf; /* buffer address */
61 struct ifreq *ifc_req; /* array of structures */
67 通常、ユーザーによる設定対象デバイスの指定は、 \fIifr_name\fP にインターフェースの名前をセットすることによって行う。
68 他の構造体の全てのメンバは、メモリを共有する。
70 「特権が必要」と記述されている ioctl を実行するには、 実効ユーザー ID が 0 か、 \fBCAP_NET_ADMIN\fP
71 権限が必要である。これが満たされていない場合は \fBEPERM\fP が返される。
74 \fIifr_ifindex\fP を受け取り、インターフェースの名前を \fIifr_name\fP に入れて返す。これは結果を \fIifr_name\fP
78 インターフェースの interface index を取得し、 \fIifr_ifindex\fP に入れて返す。
80 \fBSIOCGIFFLAGS\fP, \fBSIOCSIFFLAGS\fP
81 .\" Do not right adjust text blocks in tables
82 デバイスの active フラグワードを取得または設定する。 \fIifr_flags\fP には以下の値のビットマスクが入る。
90 IFF_BROADCAST:有効なブロードキャストアドレスがセットされている。
92 IFF_LOOPBACK:インターフェースはループバックである。
93 IFF_POINTOPOINT:インターフェースは point\-to\-point リンクである。
94 IFF_RUNNING:リソースが割り当て済み。
96 arp プロトコルがない。 L2 宛先アドレスが設定されていない。
98 IFF_PROMISC:インターフェースは promiscuous モードである。
99 IFF_NOTRAILERS:trailer の利用を避ける。
100 IFF_ALLMULTI:全てのマルチキャストパケットを受信する。
101 IFF_MASTER:負荷分散グループのマスターである。
102 IFF_SLAVE:負荷分散グループのスレーブである。
103 IFF_MULTICAST:マルチキャストをサポートしている。
104 IFF_PORTSEL:ifmap によってメディアタイプを選択できる。
105 IFF_AUTOMEDIA:自動メディア選択が有効になっている。
107 このインターフェースが閉じると、アドレスは失われる。
109 IFF_LOWER_UP:ドライバからの L1 アップの通知 (Linux 2.6.17 以降)
110 IFF_DORMANT:ドライバからの休止状態の通知 (Linux 2.6.17 以降)
111 IFF_ECHO:送られたパケットをエコーする (Linux 2.6.25 以降)
115 active フラグワードの設定は特権が必要な操作である。
116 読み出しはどんなプロセスからも可能である。
118 \fBSIOCGIFPFLAGS\fP, \fBSIOCSIFPFLAGS\fP
119 デバイスの拡張 (プライベート) フラグを取得または設定する。
120 \fIifr_flags\fP には以下の値のビットマスクが入る。
126 IFF_802_1Q_VLAN:インターフェースは 802.1Q VLAN デバイスである。
127 IFF_EBRIDGE:インターフェースは Ethernet ブリッジデバイスである。
128 IFF_SLAVE_INACTIVE:インターフェースは非アクティブな bonding のスレーブである。
129 IFF_MASTER_8023AD:インターフェースは 802.3ad bonding のマスターである。
130 IFF_MASTER_ALB:インターフェースは balanced\-alb bonding のマスターである。
131 IFF_BONDING:インターフェースは bonding のマスターかスレーブである。
132 IFF_SLAVE_NEEDARP:インターフェースは検証に APR が必要である。
133 IFF_ISATAP:インターフェースは RFC4214 ISATAP インターフェースである。
136 拡張 (プライベート) インターフェースフラグの設定には特権が必要である。
138 \fBSIOCGIFADDR\fP, \fBSIOCSIFADDR\fP
139 \fIifr_addr\fP を用いてデバイスのアドレスの設定/取得を行う。
140 インターフェースのアドレスの設定は特権が必要な操作である。
141 互換性確保のため、設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
143 \fBSIOCGIFDSTADDR\fP, \fBSIOCSIFDSTADDR\fP
144 point\-to\-point デバイスの宛先アドレスを \fIifr_dstaddr\fP を用いて
146 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
147 宛先アドレスの設定は特権が必要な操作である。
149 \fBSIOCGIFBRDADDR\fP, \fBSIOCSIFBRDADDR\fP
150 デバイスのブロードキャストアドレスを \fIifr_brdaddr\fP を用いて
152 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
153 ブロードキャストアドレスの設定は特権が必要な操作である。
155 \fBSIOCGIFNETMASK\fP, \fBSIOCSIFNETMASK\fP
156 デバイスのネットワークマスクを \fIifr_netmask\fP を用いて
158 設定/取得ができるのは \fBAF_INET\fP アドレスだけである。
159 ネットワークマスクの設定は特権が必要な操作である。
161 \fBSIOCGIFMETRIC\fP, \fBSIOCSIFMETRIC\fP
162 デバイスのメトリックを \fIifr_metric\fP を用いて取得・設定する。 これはまだ実装されていない。読み出そうとすると \fIifr_metric\fP
163 に 0 をセットして返り、設定しようとすると \fBEOPNOTSUPP\fP が返る。
165 \fBSIOCGIFMTU\fP, \fBSIOCSIFMTU\fP
166 デバイスの MTU (Maximum Transfer Unit) を \fIifr_mtu\fP を用いて取得・設定する。 MTU
167 の設定は特権が必要な操作である。 MTU の値を小さくしすぎるとカーネルがクラッシュするかもしれない。
169 \fBSIOCGIFHWADDR\fP, \fBSIOCSIFHWADDR\fP
170 デバイスのハードウェアアドレスを \fIifr_hwaddr\fP を用いて取得・設定する。 ハードウェアアドレスは \fIsockaddr\fP
171 構造体に設定される。 \fIsa_family\fP には ARPHRD_* デバイスタイプが入り、 \fIsa_data\fP にはバイト 0 から始まる L2
172 ハードウェアアドレスが入る。 ハードウェアアドレスの設定は特権が必要な操作である。
174 \fBSIOCSIFHWBROADCAST\fP
175 デバイスのハードウェアブロードキャストアドレスを \fIifr_hwaddr\fP の値に設定する。この操作には特権が必要である。
177 \fBSIOCGIFMAP\fP, \fBSIOCSIFMAP\fP
178 インターフェースのハードウェアのパラメータを \fIifr_map\fP を用いて取得・設定する。 パラメータの設定は特権が必要な操作である。
183 unsigned long mem_start;
184 unsigned long mem_end;
185 unsigned short base_addr;
193 ifmap 構造体の解釈はデバイスドライバとアーキテクチャに依存する。
195 \fBSIOCADDMULTI\fP, \fBSIOCDELMULTI\fP
196 デバイスのリンク層のマルチキャストフィルターから、 \fIifr_hwaddr\fP のアドレスを追加・削除する。これらの操作には特権が必要である。
197 別の方法が \fBpacket\fP(7) で解説されている。
199 \fBSIOCGIFTXQLEN\fP, \fBSIOCSIFTXQLEN\fP
200 デバイスの送信キューの長さを \fIifr_qlen\fP に取得・設定する。送信キューの長さの設定には特権が必要である。
203 \fIifr_name\fP で指定したインターフェースの名前を \fIifr_newname\fP に変更する。この操作には特権が必要である。インターフェースが
207 .\" Slaving isn't supported in 2.2
210 .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE
211 .\" Get or set the slave device using
213 .\" Setting the slave device is a privileged operation.
215 .\" FIXME add amateur radio stuff.
216 インターフェース(トランスポート層)アドレスのリストを返す。 現在のところ、互換性のために \fBAF_INET\fP (IPv4)
217 ファミリーのアドレスのみである。 ユーザーは \fIifconf\fP 構造体を ioctl の引数として渡す。 \fIifconf\fP 構造体には、
218 \fIifreq\fP 構造体の配列へのポインタである \fIifc_req\fP と、バイト単位の配列の長さを指定する \fIifc_len\fP が含まれる。
219 カーネルは ifreqs を現在動作している全ての L3 インターフェースアドレスで埋める。 \fIifr_name\fP にはインターフェース名
220 (eth0:1 など) が入り、 \fIifr_addr\fP にはアドレスが入る。 カーネルは実際の長さを \fIifc_len\fP に返す。
221 \fIifc_len\fP が元のバッファの長さと同じだった場合、 オーバーフローを起こしている可能性があるので、
222 全てのアドレスを取得するためにより大きなバッファで再試行するべきである。 エラーがなかった場合は ioctl は 0 を返す。 エラーがあった場合は
223 \-1 を返す。 オーバーフローはエラーとは見なされない。
225 ほとんどのプロトコルには、専用のインターフェースオプションを 設定するための独自の ioctl が存在する。 説明は各プロトコルの man
228 さらに、デバイスによってはプライベートな ioctl がある。 これらはここでは説明しない。
230 厳密にいうと、 \fBSIOCGIFCONF\fP や、 \fBAF_INET\fP ソケットアドレスだけを
231 引き数に取ったり返したりする他の ioctl は IP 固有であり、 \fBip\fP(7)
234 アドレスがなかったり、 \fBIFF_RUNNING\fP フラグがセットされていないインターフェースの名前は \fI/proc/net/dev\fP
237 ローカル IPV6 IP アドレスは \fI/proc/net\fP か \fBrtnetlink\fP(7) で知ることができる。
239 glibc 2.1 では \fI<net/if.h>\fP に \fIifr_newname\fP マクロがない。
240 とりあえずの対応策として、以下のコードを追加しておくこと。
245 #define ifr_newname ifr_ifru.ifru_slave
250 \fBproc\fP(5), \fBcapabilities\fP(7), \fBip\fP(7), \fBrtnetlink\fP(7)
252 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
253 である。プロジェクトの説明とバグ報告に関する情報は
254 http://www.kernel.org/doc/man\-pages/ に書かれている。