OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / draft / man7 / ip.7
1 .\" t
2 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
3 .\"
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.
9 .\" %%%LICENSE_END
10 .\"
11 .\" $Id: ip.7,v 1.19 2000/12/20 18:10:31 ak Exp $
12 .\"
13 .\" FIXME The following socket options are yet to be documented
14 .\"     IP_XFRM_POLICY (2.5.48)
15 .\"         Needs CAP_NET_ADMIN
16 .\"     IP_IPSEC_POLICY (2.5.47)
17 .\"         Needs CAP_NET_ADMIN
18 .\"     IP_PASSSEC (2.6.17)
19 .\"         Boolean
20 .\"         commit 2c7946a7bf45ae86736ab3b43d0085e43947945c
21 .\"         Author: Catherine Zhang <cxzhang@watson.ibm.com>
22 .\"     IP_MINTTL (2.6.34)
23 .\"         commit d218d11133d888f9745802146a50255a4781d37a
24 .\"         Author: Stephen Hemminger <shemminger@vyatta.com>
25 .\"     MCAST_JOIN_GROUP (2.4.22 / 2.6)
26 .\"     MCAST_BLOCK_SOURCE (2.4.22 / 2.6)
27 .\"     MCAST_UNBLOCK_SOURCE (2.4.22 / 2.6)
28 .\"     MCAST_LEAVE_GROUP (2.4.22 / 2.6)
29 .\"     MCAST_JOIN_SOURCE_GROUP (2.4.22 / 2.6)
30 .\"     MCAST_LEAVE_SOURCE_GROUP (2.4.22 / 2.6)
31 .\"     MCAST_MSFILTER (2.4.22 / 2.6)
32 .\"     IP_UNICAST_IF (3.4)
33 .\"         commit 76e21053b5bf33a07c76f99d27a74238310e3c71
34 .\"         Author: Erich E. Hoover <ehoover@mines.edu>
35 .\"
36 .\"*******************************************************************
37 .\"
38 .\" This file was generated with po4a. Translate the source file.
39 .\"
40 .\"*******************************************************************
41 .\"
42 .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
43 .\" Translated 1999-12-06, NAKANO Takeo <nakano@apm.seikei.ac.jp>
44 .\" Updated 2001-02-14, Kentaro Shirakata <argrath@ub32.org>
45 .\" Updated 2001-04-04, Yuichi SATO <ysato@h4.dion.ne.jp>
46 .\" Updated & Modified 2003-10-16, Yuichi SATO <ysato444@yahoo.co.jp>
47 .\" Updated & Modified 2005-01-22, Yuichi SATO
48 .\" Updated & Modified 2005-09-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
49 .\" Updated & Modified 2005-10-06, Akihiro MOTOKI
50 .\" Updated 2007-01-05, Akihiro MOTOKI, Catch up to LDP man-pages 2.43
51 .\" Updated 2007-05-28, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.48
52 .\" Updated 2008-12-26, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.14
53 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
54 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
55 .\"
56 .TH IP 7 2014\-05\-10 Linux "Linux Programmer's Manual"
57 .SH 名前
58 ip \- Linux IPv4 プロトコルの実装
59 .SH 書式
60 \fB#include <sys/socket.h>\fP
61 .br
62 .\" .B #include <net/netinet.h> -- does not exist anymore
63 .\" .B #include <linux/errqueue.h> -- never include <linux/foo.h>
64 \fB#include <netinet/in.h>\fP
65 .br
66 \fB#include <netinet/ip.h> \fP/* 上記のスーパーセット */
67 .sp
68 \fItcp_socket\fP\fB = socket(AF_INET, SOCK_STREAM, 0);\fP
69 .br
70 \fIudp_socket\fP\fB = socket(AF_INET, SOCK_DGRAM, 0);\fP
71 .br
72 \fIraw_socket\fP\fB = socket(AF_INET, SOCK_RAW, \fP\fIprotocol\fP\fB);\fP
73 .SH 説明
74 .\" FIXME . has someone verified that 2.1 is really 1812 compliant?
75 Linux は RFC\ 791 と RFC\ 1122 で記述されている Internet Protocol, version 4 を実装している。
76 \fBip\fP には RFC\ 1112 に準拠した level 2 マルチキャストの実装が含まれている。 またパケットフィルタ機能を含む IP
77 ルーターも実装されている。
78 .PP
79 プログラミングインターフェースは BSD ソケットと互換である。 ソケットに関するより詳細な情報は \fBsocket\fP(7)  を参照のこと。
80 .PP
81 IP ソケットは、 \fBsocket\fP(2) 関数を \fBsocket(AF_INET, \fP\fIsocket_type\fP\fB, \fP
82 \fIprotocol\fP\fB)\fP のように呼び出すことで生成される。指定できるソケットタイプは
83 3 つあり、 \fBtcp\fP(7) ソケットをオープンする場合 \fBSOCK_STREAM\fP、 \fBudp\fP(7)
84 ソケットをオープンする場合 \fBSOCK_DGRAM\fP、 IP プロトコルに直接アクセスする
85 ために \fBraw\fP(7) ソケットをオープンする場合には \fBSOCK_RAW\fP である。
86 \fIprotocol\fP は送受信される IP ヘッダーに書かれる IP プロトコルである。
87 指定できる値は、 TCP ソケットには 0 か \fBIPPROTO_TCP\fP、 UDP ソケットには
88 0 か \fBIPPROTO_UDP\fP に限られる。 \fBSOCK_RAW\fP に対しては、 RFC\ 1700 で定義
89 されている有効な IANA IP プロトコルを、 割り当てられている番号で指定する
90 ことができる。
91 .PP
92 あるプロセスで、やってくるパケットを受信したり 接続要求を受けたりしたい場合には、 そのプロセスはローカルなインターフェースアドレスに、
93 \fBbind\fP(2) を用いてソケットをバインドしなければならない。 この場合、 ローカルの「アドレスとポート」のペアに対してバインドできる IP
94 ソケットは一つだけである。 \fBbind\fP(2) の呼び出しで \fBINADDR_ANY\fP が指定されていた場合は、 ソケットは \fIすべて\fP
95 のローカルインターフェースにバインドされる。 \fBlisten\fP(2) がバインドされていないソケットに対してコールされると、 そのソケットは、
96 ローカルポートはランダムに選択された空いているポートで、 ローカルアドレスは \fBINADDR_ANY\fP で自動的にバインドされる。
97 \fBconnect\fP(2) がバインドされていないソケットに対してコールされると、 そのソケットは、
98 ローカルポートはランダムに選択された空いているポートか未使用の共有ポートで、 ローカルアドレスは \fBINADDR_ANY\fP で自動的にバインドされる。
99
100 \fBSO_REUSEADDR\fP フラグがセットされていない場合には、 バインドされていた TCP ローカルソケットアドレスは
101 クローズされた後しばらくの間使えなくなる。 \fBSO_REUSEADDR\fP フラグを使うと TCP の信頼性を低下させるので、
102 使うときには注意が必要である。
103 .SS アドレスのフォーマット
104 IP ソケットアドレスは、 IP インターフェースアドレスと 16ビットのポート番号の組み合わせで定義される。 IP
105 プロトコルそのものはポート番号を扱わない。 ポート番号は、 \fBudp\fP(7)  や \fBtcp\fP(7)  といった、上位のプロトコルで実装される。
106 raw ソケットでは、 \fIsin_port\fP が IP プロトコルにセットされる。
107 .PP
108 .in +4n
109 .nf
110 struct sockaddr_in {
111     sa_family_t    sin_family; /* address family: AF_INET */
112     in_port_t      sin_port;   /* port in network byte order */
113     struct in_addr sin_addr;   /* internet address */
114 };
115
116 /* Internet address. */
117 struct in_addr {
118     uint32_t       s_addr;     /* address in network byte order */
119 };
120 .fi
121 .in
122 .PP
123 \fIsin_familiy\fP には常に \fBAF_INET\fP をセットする。これは必須である。 Linux 2.2 では、このセットを忘れると
124 ほとんどのネットワーク関数は \fBEINVAL\fP を返すようになっている。 \fIsin_port\fP
125 にはポート番号をネットワークバイトオーダーで指定する。 1024 未満のポート番号は \fI特権ポート (privileged ports)\fP と呼ばれる
126 (\fI予約ポート (reserved ports)\fP とも時々呼ばれる)。 特権プロセス (\fBCAP_NET_BIND_SERVICE\fP
127 ケーパビリティを持つプロセス) 以外のプロセスは、これらのポートには \fBbind\fP(2)  できない。 IPv4
128 プロトコルそのものにはポートに関する概念がない。ポートが実装されるのは、 \fBtcp\fP(7)  や \fBudp\fP(7)
129 といった、上位のプロトコルにおいてのみである。
130 .PP
131 \fIsin_addr\fP は IP ホストアドレスである。 \fIstruct in_addr\fP の \fIs_addr\fP
132 メンバには、ホストのインターフェースアドレスを ネットワークバイトオーダーで
133 指定する。 \fIin_addr\fP は、\fBINADDR_*\fP の一つ (例えば \fBINADDR_ANY\fP) を代入する、
134 ライブラリ関数 \fBinet_aton\fP(3), \fBinet_addr\fP(3), \fBinet_makeaddr\fP(3) を用いる、
135 あるいは名前解決機構 (name resolver) を直接用いる、のどれかで設定すべきである。
136 (\fBgethostbyname\fP(3) を見よ)。
137
138 .\" Leave a loophole for XTP @)
139 IPv4 アドレスには、ユニキャストアドレス、 ブロードキャストアドレス、マルチキャストアドレスがある。
140 ユニキャストアドレスは、あるホストの一つのアドレスを指定する。 ブロードキャストアドレスは、あるネットワーク上の全てのホストを指定する。
141 マルチキャストアドレスは、マルチキャストグループに所属する 全てのホストを指定する。ブロードキャストアドレスへのデータグラムは、
142 \fBSO_BROADCAST\fP ソケットフラグがセットされていないと送信・受信できない。
143 現在の実装では、接続指向のソケットにはユニキャストアドレスしか使えない。
144
145 アドレスとポートは常にネットワークバイトオーダーで格納されることに注意せよ。 具体的には、ポートを指定する数値には \fBhtons\fP(3)
146 を呼び出す必要がある。 標準ライブラリにあるアドレス/ポート操作関数は すべてネットワークバイトオーダーで動作する。
147
148 特別なアドレスがいくつか存在する: \fBINADDR_LOOPBACK\fP(127.0.0.1)  は loopback
149 デバイスを通して常にローカルなホストを参照する。 \fBINADDR_ANY\fP(0.0.0.0)  は任意のアドレスを意味し、バインド用である。
150 \fBINADDR_BROADCAST\fP(255.255.255.255)  は任意のホストを意味し、歴史的理由から、バインドの際には
151 \fBINADDR_ANY\fP と同じ効果になる。
152 .SS ソケットオプション
153 .\" or SOL_IP on Linux
154 IP にはプロトコル固有のソケットオプションがいくつか存在し、 \fBsetsockopt\fP(2)  で設定が、 \fBgetsockopt\fP(2)
155 で取得ができる。 IP のソケットオプションレベルは \fBIPPROTO_IP\fP である。 ブール整数値のフラグでは、 0
156 は偽、それ以外は真を意味する。
157 .TP 
158 \fBIP_ADD_MEMBERSHIP\fP (Linux 1.2 以降)
159 マルチキャストグループに参加する。 引き数は \fIip_mreqn\fP 構造体である。
160 .sp
161 .in +4n
162 .nf
163 struct ip_mreqn {
164     struct in_addr imr_multiaddr; /* IP multicast group
165                                      address */
166     struct in_addr imr_address;   /* IP address of local
167                                      interface */
168     int            imr_ifindex;   /* interface index */
169 };
170 .fi
171 .in
172 .sp
173 .\" (i.e., within the 224.0.0.0-239.255.255.255 range)
174 \fIimr_multiaddr\fP には、アプリケーションが参加または脱退したい マルチキャストグループのアドレスが入る。
175 指定するアドレスは有効なマルチキャストアドレスでなければならない (さもなければ \fBsetsockopt\fP(2)  がエラー \fBEINVAL\fP
176 で失敗する)。 \fIimr_address\fP はシステムがマルチキャストグループに参加する際に用いる ローカルなインターフェースのアドレスである。
177 これが \fBINADDR_ANY\fP であった場合には、適切なインターフェースがシステムによって選択される。 \fIimr_ifindex\fP は
178 \fIimr_multiaddr\fP グループに参加/脱退するインターフェースの interface index である。
179 どのインターフェースでもよい場合は 0 にする。
180 .IP
181 .\"
182 \fIip_mreqn\fP 構造体は Linux 2.2 以降でのみ利用可能である。互換性のため、 古い \fIip_mreq\fP 構造体 (Linux 1.2
183 以降で存在する) もまだサポートされている。 \fIip_mreqn\fP との違いは、 \fIimr_ifindex\fP フィールドを含まないことだけである。
184 \fBsetsockopt\fP(2) でのみ使える。
185 .TP 
186 \fBIP_ADD_SOURCE_MEMBERSHIP\fP (Linux 2.4.22 以降 / 2.5.68 以降)
187 マルチキャストグループに参加、指定された送信元からのデータの受信のみを許可する。 引き数は \fIip_mreq_source\fP 構造体である。
188 .sp
189 .in +4n
190 .nf
191 struct ip_mreq_source {
192     struct in_addr imr_multiaddr;  /* IP multicast group
193                                       address */
194     struct in_addr imr_interface;  /* IP address of local
195                                       interface */
196     struct in_addr imr_sourceaddr; /* IP address of
197                                       multicast source */
198 };
199 .fi
200 .in
201 .sp
202 \fIip_mreq_source\fP 構造体は \fBIP_ADD_MEMBERSIP\fP の項で説明した \fIip_mreqn\fP に似ている。
203 \fIimr_multiaddr\fP フィールドには、アプリケーションが参加または脱退したいマルチキャストグループのアドレスが入る。
204 \fIimr_interface\fP フィールドは、 マルチキャストグループに参加する際に システムが使用すべきローカルインターフェースのアドレスである。
205 \fIimr_sourceaddr\fP フィールドには、アプリケーションがデータを受信したい送信元のアドレスが入る。
206 .IP
207 このオプションを複数回使うことで、 複数の送信元からのデータ受信を許可することができる。
208 .TP 
209 \fBIP_BLOCK_SOURCE\fP (since Linux 2.4.22 以降 / 2.5.68 以降)
210 指定したグループで、指定した送信元からのマルチキャストデータの受信を停止する。 このオプションは、アプリケーションが
211 \fBIP_ADD_MEMBERSHIP\fP か \fBIP_ADD_SOURCE_MEMBERSHIP\fP
212 のいずれかを使ってマルチキャストグループに参加した後でのみ有効である。
213 .IP
214 引き数は \fIip_mreq_source\fP 構造体である。 \fBIP_ADD_SOURCE_MEMBERSHIP\fP の項に説明がある。
215 .TP 
216 \fBIP_DROP_MEMBERSHIP\fP (Linux 1.2 以降)
217 マルチキャストグループから抜ける。引き数は \fBIP_ADD_MEMBERSHIP\fP と同様に \fIip_mreqn\fP または \fIip_mreq\fP
218 構造体である。
219 .TP 
220 \fBIP_DROP_SOURCE_MEMBERSHIP\fP (Linux 2.4.22 以降 / 2.5.68 以降)
221 送信元を指定してグループから抜ける。 つまり、 指定したマルチキャストグループの指定された送信元からのデータ受信を停止する。
222 アプリケーションは同じマルチキャストグループで複数の送信元を購読 (subscribe) している場合には、
223 残りの送信元からのデータの受信は引き続き配信される。 すべての送信元からのデータ受信を一度で停止するには \fBIP_LEAVE_GROUP\fP
224 を使うこと。
225 .IP
226 引き数は \fIip_mreq_source\fP 構造体である。 \fBIP_ADD_SOURCE_MEMBERSHIP\fP の項に説明がある。
227 .TP 
228 \fBIP_FREEBIND\fP (Linux 2.4 以降)
229 .\" Precisely: 2.4.0-test10
230 このブール値のオプションを有効にすると、ローカルではない IP アドレスや存在
231 しない IP アドレスをバインドできるようになる。これを使うと、対応するネット
232 ワークインターフェイスがなかったり、アプリケーションがソケットをバインドしようと
233 する時点で特定の動的 IP アドレスが有効になっていなかったりしても、ソケットを
234 接続待ち状態 (listening) にできるようになる。
235 このオプションは、下記に説明がある \fIip_nonlocal_bind\fP \fI/proc\fP インターフェイス
236 のソケット単位の設定である。
237 .TP 
238 \fBIP_HDRINCL\fP (Linux 2.0 以降)
239 有効になっていると、ユーザーは IP ヘッダーをユーザーデータの前に与える。 \fBSOCK_RAW\fP ソケットでのみ有効である。詳細は
240 \fBraw\fP(7)  を見よ。このフラグが有効になっていると、 \fBIP_OPTIONS\fP, \fBIP_TTL\fP, \fBIP_TOS\fP は無視される。
241 .TP 
242 \fBIP_MSFILTER\fP (since Linux 2.4.22 以降 / 2.5.68 以降)
243 このオプションを使うと、 高度なフィルタリング API へアクセスできる。 この API ではすべての状態にアクセスできる。 引き数は
244 \fIip_msfilter\fP 構造体である。
245 .sp
246 .in +4n
247 .nf
248 struct ip_msfilter {
249     struct in_addr imsf_multiaddr; /* IP multicast group
250                                       address */
251     struct in_addr imsf_interface; /* IP address of local
252                                       interface */
253     uint32_t       imsf_fmode;     /* Filter\-mode */
254
255     uint32_t       imsf_numsrc;    /* Number of sources in
256                                       the following array */
257     struct in_addr imsf_slist[1];  /* Array of source
258                                       addresses */
259 };
260 .fi
261 .in
262 .sp
263 \fBMCAST_INCLUDE\fP と \fBMCAST_EXCLUDE\fP の 2 つのマクロがあり、 フィルタリングモードを指定するのに使用できる。
264 また、 \fBIP_MSFILTER_SIZE\fP(n) マクロがあり、 送信元リストに \fIn\fP 個の送信元が入った \fIip_msfilter\fP
265 構造体を格納するのに必要なメモリー量を判定することができる。
266 .IP
267 マルチキャスト送信元フィルタリングの全容は RFC\ 3376 を参照のこと。
268 .TP 
269 \fBIP_MTU\fP (Linux 2.2 以降)
270 .\" Precisely: 2.1.124
271 ソケットの、既知の path MTU を取得する。 ソケットが接続している場合のみ有効である。 \fBgetsockopt\fP(2)  でのみ使える。
272 .TP 
273 \fBIP_MTU_DISCOVER\fP (Linux 2.2 以降)
274 .\" Precisely: 2.1.124
275 ソケットの Path MTU Discovery の設定をセット・取得する。
276 有効になっていると、Linux は \fBSOCK_STREAM\fP ソケットに対して
277 RFC\ 1191 で定義されている Path MTU Discovery を行う。
278 \fBSOCK_STREAM\fP でないソケットについては、 \fBIP_PMTUDISC_DO\fP をセットすると、
279 全ての送信パケットでフラグメント不許可フラグ (don't\-fragment flag) が必ず
280 セットされるようになる。 \fBSOCK_STREAM\fP でないソケットでは、
281 パケットを MTU のサイズの塊に分割したり、必要に応じて再送したりするのは、
282 ユーザーが責任を持って行う必要がある。
283 既知の Path MTU よりも大きなデータグラムの送信が要求されると、
284 カーネルは (\fBEMSGSIZE\fP で) 送信を拒否する。
285 \fBIP_PMTUDISC_WANT\fP の場合は、 Path MTU に基づいて必要であればデータグラム
286 の分割が行われ、それ以外の場合はフラグメント不許可フラグがセットされる。
287
288 システム全体のデフォルトは \fBIP_PMTUDISC_WANT\fP と \fBIP_PMTUDISC_DONT\fP の
289 どちらかに設定することができる。設定の変更は、
290 \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP ファイルに、0 (\fBIP_PMTUDISC_WANT\fP) か
291 0 以外 (\fBIP_PMTUDISC_DONT\fP) を書き込むことで行う。
292 .TS
293 tab(:);
294 c l
295 l l.
296 Path MTU discovery 値:意味
297 IP_PMTUDISC_WANT:ルートごとの設定を用いる。
298 IP_PMTUDISC_DONT:Path MTU Discovery を行わない。
299 IP_PMTUDISC_DO:常に Path MTU Discovery を行う。
300 IP_PMTUDISC_PROBE:DFビットをセットするが、Path MTU を無視する。
301 .TE
302
303 path MTU discovery が有効になっていると、カーネルは宛先ホストごとに 自動的に
304 path MTU を処理する。特定の相手に \fBconnect\fP(2) で接続した場合には、
305 \fBIP_MTU\fP ソケットオプションを用いれば、既知の path MTU の取得に便利である
306 (たとえば \fBEMSGSIZE\fP エラーが起きた後など)。 path MTU は時間とともに変化する
307 かもしれない。 宛先がたくさんあるコネクションレスなソケットでは、 与えられた
308 宛先に対する新しい MTU にも、 エラーキューを用いてアクセスすることができる
309 (\fBIP_RECVERR\fP を見よ)。 MTU 更新が到着するごとに、新たなエラーがキューイング
310 される。
311
312 MTU discovery の進行中には、データグラムソケットからの初期パケットは 到着しないかもしれない。 UDP を用いるアプリケーションでは、
313 このことを気にかけておき、 パケットの再送アルゴリズムにこの分を除外させるべきである。
314
315 .\" FIXME . this is an ugly hack
316 接続していないソケットに対して path MTU discovery プロセスを立ち上げるには、 大きなデータグラムサイズ (最大 64K
317 ヘッダーバイト長) からはじめて、 path MTU が更新されるまでサイズを縮めていくことも可能である。
318
319 path MTU の値をまず見積もってみるには、宛先アドレスに \fBconnect\fP(2)  を使ってデータグラムソケットを接続し、
320 \fBgetsockopt\fP(2)  を \fBIP_MTU\fP オプションとともに呼び、 MTU を取得することである。
321
322 \fBIP_PMTUDISC_PROBE\fP (Linux 2.6.22 以降で利用可能) を設定することで、 \fBSOCK_DGRAM\fP や
323 \fBSOCK_RAW\fP のソケットで RFC 4821 の MTU 探索を実装することが可能である。 また、この機能は、 \fBtracepath\fP(8)
324 のような診断ツールで特に有用である。これらのツールでは、 観測された Path MTU よりも大きな探索パケットを意図的に 送信しようとする。
325 .TP 
326 \fBIP_MULTICAST_ALL\fP (Linux 2.6.31 以降)
327 このオプションを使って、 マルチキャストメッセージの、 ワイルドカードの \fBINADDR_ANY\fP アドレスにバインドされているソケットへの
328 配送ポリシーを変更することができる。 引き数はブート値の整数で、 デフォルト値は 1 である。 このオプションを 1
329 に設定されている場合、そのソケットでは、このシステムで参加しているすべてのグループからのメッセージが受信される。 それ以外の場合は、そのソケットでは、
330 そのソケットに対して (\fBIP_ADD_MEMBERSHIP\fP などを使って) 明示的に参加が指定されたグループからのメッセージだけが受信される。
331 .TP 
332 \fBIP_MULTICAST_IF\fP (Linux 1.2 以降)
333 .\" net: IP_MULTICAST_IF setsockopt now recognizes struct mreq
334 .\" Commit: 3a084ddb4bf299a6e898a9a07c89f3917f0713f7
335 ローカルデバイスをマルチキャストソケットとして設定する。引き数は \fBIP_ADD_MEMBERSHIP\fP と同様に \fIip_mreqn\fP 構造体か
336 \fIip_mreq\fP 構造体 (Linux 3.5 以降) である。
337 .IP
338 不正なソケットオプションが渡されると、 \fBENOPROTOOPT\fP が返される。
339 .TP 
340 \fBIP_MULTICAST_LOOP\fP (Linux 1.2 以降)
341 マルチキャストパケットをローカルなソケットにループバックするかどうかを 定めるブール値の整数引き数を設定・取得する。
342 .TP 
343 \fBIP_MULTICAST_TTL\fP (Linux 1.2 以降)
344 このソケットから発信されるマルチキャストパケットの time\-to\-live 値を設定・取得する。 マルチキャストパケットに対しては、できるだけ小さな
345 TTL に設定することがとても重要である。デフォルトは 1 で、 ユーザープログラムが明示的に要求しない限り
346 マルチキャストパケットはローカルなネットワークから出ないことになる。 引き数に整数を取る。
347 .TP 
348 \fBIP_NODEFRAG\fP (Linux 2.6.36 以降)
349 有効 (引き数が 0 以外の場合) になっていると、netfilter 層での出力パケットの
350 再構築 (reassembly) が行われなくなる。このオプションは \fBSOCK_RAW\fP ソケット
351 においてのみ有効である。引き数は整数である。
352 .TP 
353 \fBIP_OPTIONS\fP (Linux 2.0 以降)
354 .\" Precisely: 1.3.30
355 このソケットから送られるパケット全てに付随する IP オプションを 設定・取得する。オプションを保存しているメモリーバッファーへのポインターと
356 オプションの長さとを引き数に取る。 \fBsetsockopt\fP(2)  を呼び出すと、ソケットに関連づけられる IP オプションを設定できる。 IPv4
357 におけるオプションのサイズの最大値は 40 バイトである。 用いることのできるオプションについては RFC\ 791 を見よ。
358 \fBSOCK_STREAM\fP ソケットに対する初期接続要求パケットに IP オプションが含まれていると、
359 ルーティングヘッダーを付けて戻されてくる初期パケットの IP オプションに同じオプションがセットされる。接続が確立された後、
360 やってきたパケットのオプションを変更することはできない。 デフォルトでは。外部から受信したパケットの全ての source routing オプション
361 の処理は無効となっており、 \fI/proc\fP インターフェースの \fIaccept_source_route\fP
362 を使うとこれを有効にできる。これを無効にしていても timestamps など の他のオプションの処理は行われる。データグラムソケットでは、 IP
363 オプションはローカルユーザーしか設定できない。 \fBgetsockopt\fP(2)  を \fBIP_OPTIONS\fP
364 をつけて呼ぶと、現在送信に用いられている IP オプションを 引き数に与えたバッファーに取得できる。
365 .TP 
366 \fBIP_PKTINFO\fP (Linux 2.2 以降)
367 .\" Precisely: 2.1.68
368 \fBIP_PKTINFO\fP 補助メッセージを渡す。これには到着パケットに関する情報を提供する \fIpktinfo\fP 構造体が含まれている。
369 データグラム指向のソケットでしか動作しない。 引き数は \fBIP_PKTINFO\fP メッセージを通過させるかどうかをソケットに知らせるフラグである。
370 メッセージ自身は \fBrecvmsg\fP(2)  または \fBsendmsg\fP(2)  を用いたパケットの制御メッセージとしてのみ送受信できる。
371 .IP
372 .in +4n
373 .nf
374 struct in_pktinfo {
375     unsigned int   ipi_ifindex;  /* Interface index */
376     struct in_addr ipi_spec_dst; /* Local address */
377     struct in_addr ipi_addr;     /* Header Destination
378                                     address */
379 };
380 .fi
381 .in
382 .IP
383 .\" FIXME . elaborate on that.
384 .\" This field is grossly misnamed
385 \fIipi_ifindex\fP はパケットが受信されたインターフェースの、他と重ならないインデックスである。 \fIipi_spec_dst\fP
386 はパケットのローカルアドレスである。 \fIipi_addr\fP はパケットヘッダーにある宛先アドレスである。 \fBIP_PKTINFO\fP が
387 \fBsendmsg\fP(2)  に渡されて、かつ \fIipi_spec_dst\fP が 0 以外の場合、 \fIipi_spec_dst\fP
388 はルーティングテーブルを検索する際にローカルな送信元アドレスとして使用され、 IP source route オプションを設定するのにも使用される。
389 \fIipi_ifindex\fP が 0 以外の場合、このインデックスによって指定されるインターフェースの プライマリローカルアドレスで
390 \fIipi_spec_dst\fP を上書きし、ルーティングテーブルを検索する。
391 .TP 
392 \fBIP_RECVERR\fP (Linux 2.2 以降)
393 .\" Precisely: 2.1.15
394 .\" or SOL_IP on Linux
395 エラーメッセージの受け渡しに、信頼性の高い拡張された方法を有効にする。 データグラムソケットに対して有効になっていると、
396 発生したエラーは全てソケットごとのエラーキューに保存される。 ユーザーはソケット操作からエラーを受け取ったとき、 \fBrecvmsg\fP(2)  を
397 \fBMSG_ERRQUEUE\fP フラグとともに呼べばそのエラーを取得できる。 そのエラーを記述する \fIsock_extended_err\fP
398 構造体が、タイプ \fBIP_RECVERR\fP・ レベル \fBIPPROTO_IP\fP の補助メッセージとして渡される。
399 これは接続志向でないソケットで信頼性の高いエラー処理を行いたい場合に 有用である。エラーキューの受信データフラグメントには エラーパケットが含まれる。
400 .IP
401 \fBIP_RECVERR\fP 制御メッセージには \fIsock_extended_err\fP 構造体が含まれる:
402 .IP
403 .in +4n
404 .ne 18
405 .nf
406 #define SO_EE_ORIGIN_NONE    0
407 #define SO_EE_ORIGIN_LOCAL   1
408 #define SO_EE_ORIGIN_ICMP    2
409 #define SO_EE_ORIGIN_ICMP6   3
410
411 struct sock_extended_err {
412     uint32_t ee_errno;   /* error number */
413     uint8_t  ee_origin;  /* where the error originated */
414     uint8_t  ee_type;    /* type */
415     uint8_t  ee_code;    /* code */
416     uint8_t  ee_pad;
417     uint32_t ee_info;    /* additional information */
418     uint32_t ee_data;    /* other data */
419     /* More data may follow */
420 };
421
422 struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
423 .fi
424 .in
425 .IP
426 \fIee_errno\fP にはキューに入っているエラーの \fIerrno\fP 番号が入る。 \fIee_origin\fP
427 にはエラーが発生した場所を示すコードが入る。 その他のフィールドはプロトコル依存である。 \fBSO_EE_OFFENDER\fP
428 マクロは与えられた補助メッセージへのポインターから エラーの発生したネットワークオブジェクトのアドレスへのポインターを返す。 アドレスが不明な場合、
429 \fIsockaddr\fP 構造体の \fIsa_family\fP フィールドは \fBAF_UNSPEC\fP となり、その他のフィールド値は不定である。
430 .IP
431 .\" FIXME . Is it a good idea to document that? It is a dubious feature.
432 .\" On
433 .\" .B SOCK_STREAM
434 .\" sockets,
435 .\" .B IP_RECVERR
436 .\" has slightly different semantics. Instead of
437 .\" saving the errors for the next timeout, it passes all incoming
438 .\" errors immediately to the user.
439 .\" This might be useful for very short-lived TCP connections which
440 .\" need fast error handling. Use this option with care:
441 .\" it makes TCP unreliable
442 .\" by not allowing it to recover properly from routing
443 .\" shifts and other normal
444 .\" conditions and breaks the protocol specification.
445 IP は以下のような \fIsock_extended_err\fP 構造体を用いる: \fIee_origin\fP は、エラー
446 が ICMP パケットとして受信された場合には \fBSO_EE_ORIGIN_ICMP\fP にセットされ、
447 ローカルで起こった場合には \fBSO_EE_ORIGIN_LOCAL\fP にセットされる。 不明な値は
448 無視される。 \fIee_type\fP と \fIee_code\fP は ICMP ヘッダーの type フィールドと
449 code フィールドの値にセットされる。 \fIee_info\fP には \fBEMSGSIZE\fP エラーに対す
450 る discover された MTU が入る。 メッセージにはエラーを引き起こしたノードの
451 \fIsockaddr_in\fP 構造体も含まれる。 これには \fBSO_EE_OFFENDER\fP マクロを使ってア
452 クセスできる。 ソースが不明の場合、 \fBSO_EE_OFFENDER\fP アドレスの
453 \fIsin_family\fP フィールドは \fBAF_UNSPEC\fP となる。 エラーがネットワークで起きた
454 場合には、 ソケットで有効になっていたすべての IP オプション (\fBIP_OPTIONS\fP,
455 \fBIP_TTL\fP など) とエラーパケットに含まれていたすべての IP オプションとが、 制
456 御メッセージとして渡される。 エラーを起こしたパケットのペイロード (payload)
457 は 普通のペイロードとして返される。 TCP にはエラーキューがないことに注意して
458 ほしい。 \fBMSG_ERRQUEUE\fP は \fBSOCK_STREAM\fP ソケットに対しては使えない。 TCP
459 では \fBIP_RECVERR\fP だけが有効だが、ソケット関数から返されるエラーは
460 \fBSO_ERROR\fP だけになる。
461 .IP
462 raw ソケットに対して \fBIP_RECVERR\fP を指定すると、受信したすべての ICMP エラーをアプリケーションに
463 渡すようになる。指定しないと、 接続済みのソケットに対するエラーだけを報告する。
464 .IP
465 このオプションはブール値のフラグを設定・取得する。 \fBIP_RECVERR\fP はデフォルトではオフになっている。
466 .TP 
467 \fBIP_RECVOPTS\fP (Linux 2.2 以降)
468 .\" Precisely: 2.1.15
469 到着した全ての IP オプションを \fBIP_OPTION\fP コントロールメッセージに入れてユーザーに渡す。
470 ルーティングヘッダーとその他のオプションとは、 ローカルホストに対してはあらかじめ記入されている。 \fBSOCK_STREAM\fP
471 ソケットではサポートされていない。
472 .TP 
473 \fBIP_RECVORIGDSTADDR\fP (Linux 2.6.29 以降)
474 .\" commit e8b2dfe9b4501ed0047459b2756ba26e5a940a69
475 このブール値のオプションがセットされると、
476 \fBrecvmsg\fP(2) で \fBIP_ORIGDSTADDR\fP 補助メッセージが有効になる。
477 カーネルはデータグラムを受信した元の宛先アドレスをこの補助メッセージで返す。
478 この補助メッセージには \fIstruct sockaddr_in\fP が格納される。
479 .TP 
480 \fBIP_RECVTOS\fP (Linux 2.2 以降)
481 .\" Precisely: 2.1.68
482 有効になっていると、 \fBIP_TOS\fP 補助メッセージが到着パケットとともに渡される。 これにはパケットヘッダーの
483 Service/Precedence フィールドのタイプを指定するバイトデータが含まれている。 ブール整数値のフラグをとる。
484 .TP 
485 \fBIP_RECVTTL\fP (Linux 2.2 以降)
486 .\" Precisely: 2.1.68
487 このフラグがセットされていると、 \fBIP_TTL\fP コントロールメッセージが受信パケットの time\-to\-live
488 フィールドのバイトデータとともに渡される。 \fBSOCK_STREAM\fP ソケットではサポートされていない。
489 .TP 
490 \fBIP_RETOPTS\fP
491 .\" Precisely: 2.1.15
492 \fBIP_RETOPTS\fP (Linux 2.2 以降)  \fBIP_RECVOPTS\fP と等価だが、未処理の生のオプションを、 この hop
493 では記入されない timestamp レコードと route レコードとともに返す。
494 .TP 
495 \fBIP_ROUTER_ALERT\fP (Linux 2.2 以降)
496 .\" Precisely: 2.1.68
497 フォワードすべきパケットを IP Router Alert オプションをつけて このソケットに渡す。 raw
498 ソケットに対してのみ有効である。これはたとえばユーザー空間の RSVP デーモンに対して便利である。タップされたパケットは
499 カーネルによってはフォワードされないので、これらを再送するのは ユーザーの責任となる。ソケットのバインドは無視され、
500 このようなパケットはプロトコルによってのみフィルタリングされる。 整数値のフラグを取る。
501 .TP 
502 \fBIP_TOS\fP (Linux 1.0 以降)
503 .\" FIXME elaborate on this
504 .\" Needs CAP_NET_ADMIN
505 .\" Boolean
506 .\" Since Linux 2.6.27
507 .\" Author: KOVACS Krisztian <hidden@sch.bme.hu>
508 .\" http://lwn.net/Articles/252545/
509 このソケットから送信されるすべての IP パケットに適用される Type\-Of\-Service (TOS) フィールドを設定・取得する。
510 これはネットワーク上でのパケットの優先度を決めるために用いられる。 TOS はバイトデータである。標準の TOS フラグがいくつか定義されている。
511 \fBIPTOS_LOWDELAY\fP はインタラクティブなトラフィックの遅延を最小にする。 \fBIPTOS_THROUGHPUT\fP
512 はスループットを最大にする。 \fBIPTOS_RELIABILITY\fP は信頼性を最高にする。 \fBIPTOS_MINCOST\fP
513 は転送速度が遅くてもかまわないとき、「データを詰め込む」のに用いられる。 これらのうち、 1 つまでだけを設定できる。
514 他のビットは無効で、クリアされる。 Linux はデフォルトでは \fBIPTOS_LOWDELAY\fP データグラムを最初に送信する。
515 しかし、正確な振る舞いはキュー処理の設定に依存する。 高い優先度にするにはスーパーユーザー権限 (\fBCAP_NET_ADMIN\fP ケーパビリティ)
516 が必要となるかもしれない。 優先度は (\fBSOL_SOCKET\fP, \fBSO_PRIORITY\fP)  ソケットオプションを用いれば、
517 プロトコルに依存しない形でも設定できる (\fBsocket\fP(7)  を見よ)。
518 .TP 
519 \fBIP_TRANSPARENT\fP (Linux 2.6.24 以降)
520 .\" commit f5715aea4564f233767ea1d944b2637a5fd7cd2e
521 .\"     This patch introduces the IP_TRANSPARENT socket option: enabling that
522 .\"     will make the IPv4 routing omit the non-local source address check on
523 .\"     output. Setting IP_TRANSPARENT requires NET_ADMIN capability.
524 .\" http://lwn.net/Articles/252545/
525 このブール値のオプションを有効にすると、 このソケットで透過プロキシ (transparent proxy) ができるようになる。
526 このソケットオプションを使うと、呼び出したアプリケーションは、 ローカルではない IP アドレスをバインドして、ローカルの端点として自分以外のアドレス
527 (foreign address) を持つクライアントやサーバの両方として動作できるようになる。 \fB注意\fP:
528 この機能が動作するためには、自分以外のアドレス宛のパケットが透過プロキシが動作するマシン (すなわちソケットオプション
529 \fBIP_TRANSPARENT\fP を利用するアプリケーションが動作しているシステム) 経由で転送されるように、 ルーティングが設定される必要がある。
530 このソケットオプションを有効にするには、スーパーユーザー特権 (\fBCAP_NET_ADMIN\fP ケーパビリティ) が必要である。
531 .IP
532 iptables の TPROXY ターゲットで透過プロキシリダイレクション
533 (TProxy redirection) を行うには、リダイレクトされるソケットに対して
534 このオプションを設定する必要がある。
535 .TP 
536 \fBIP_TTL\fP (Linux 1.0 以降)
537 time\-to\-live フィールドの値を設定または取得する。 この値はこのソケットから送信されるすべてのパケットに用いられる。
538 .TP 
539 \fBIP_UNBLOCK_SOURCE\fP (Linux 2.4.22 以降 / 2.5.68 以降)
540 それ以前はブロックされていたマルチキャストの送信元のブロックを解除する。 指定した送信元がブロックされていない場合は \fBEADDRNOTAVAIL\fP
541 を返す。
542 .IP
543 引き数は \fIip_mreq_source\fP 構造体である。 \fBIP_ADD_SOURCE_MEMBERSHIP\fP の項に説明がある。
544 .SS "/proc インターフェース"
545 .\" FIXME As at 2.6.12, 14 Jun 2005, the following are undocumented:
546 .\"     ip_queue_maxlen
547 .\"     ip_conntrack_max
548 .\"
549 IP プロトコルでは、いくつかのグローバルパラメーターを設定するための \fI/proc\fP ファイル群が用意されている。 これらのパラメーターには、
550 \fI/proc/sys/net/ipv4/\fP ディレクトリ内のファイルの読み書きでアクセスできる。 \fIBoolean\fP
551 と書かれたインターフェースは整数値をとり、 0 以外の値 ("true") は対応するオプションが有効、 0 値 ("false")
552 は無効、であることを意味する。
553 .TP 
554 \fIip_always_defrag\fP (Boolean; Linux 2.2.13 以降)
555 [2.2.13 で新規登場。以前のバージョンのカーネルでは、この機能は コンパイル時に \fBCONFIG_IP_ALWAYS_DEFRAG\fP
556 オプションによって制御されていた; このファイルは 2.4.x 以降では存在しない]
557
558 このブール値のフラグが有効になっている (0 以外になっている) と、 到着したフラグメント (IP パケットの一部で、
559 発信元と発信先の間のどこかのホストで、そのパケットが 大きすぎると判断され、分割された場合に生じる)  は、たとえフォワードされる場合であっても
560 処理前に再構築 (デフラグメント) される。
561
562 ファイアウォールがローカル側のネットワークに唯一のリンクを持っている 場合や、透過プロクシの場合に限って有効にすべきである。
563 通常のルーターやホストでは決して使用することのないように。 さもないとフラグメントが別のリンクを経由して伝わる場合に、
564 通信のフラグメント化ができなくなってしまう。 またフラグメント再構築処理はメモリーと CPU 時間のコストが非常に大きい。
565
566 .\"
567 これはマスカレードや透過プロクシが設定されると、 不思議な仕組みによって自動的に有効になる。
568 .TP 
569 \fIip_autoconfig\fP (Linux 2.2 以降 2.6.17 まで)
570 .\" Precisely: since 2.1.68
571 .\" FIXME document ip_autoconfig
572 .\"
573 まだ記述していない。
574 .TP 
575 \fIip_default_ttl\fP (integer; default: 64; Linux 2.2 以降)
576 .\" Precisely: 2.1.15
577 .\"
578 送出されるパケットの time\-to\-live 値のデフォルトをセットする。 これは \fBIP_TTL\fP
579 オプションを用いれば、パケットごとに変えることもできる。
580 .TP 
581 \fIip_dynaddr\fP (ブール値; デフォルト: 無効; Linux 2.0.31 以降)
582 .\"
583 動的ソケットアドレスと、インターフェースアドレスが変更された際の マスカレードエントリーの再書き込みを有効にする。 ダイアルアップインターフェースで、
584 IP アドレスが変更される場合に便利である。
585 .TP 
586 \fIip_forward\fP (ブール値; デフォルト: 無効; Linux 1.2 以降)
587 .\"
588 IP forwarding を有効にするかどうかのブール値フラグ。 IP forwarding するかどうかはインターフェースごとにも設定できる。
589 .TP 
590 \fIip_local_port_range\fP (Linux 2.2 以降)
591 .\" Precisely: since 2.1.68
592 このファイルには、 ポート番号に明示的にバインドされないソケットに割り当てられるデフォルトのローカルポートの範囲 \(em つまり「一時ポート
593 (\fIephemeral ports\fP)」に使用される範囲 \(em を定める 2 つの整数が入っている。
594 一時ポートは以下の場合にソケットに割り当てられる。
595 .RS
596 .IP * 3
597 \fBbind\fP(2) の呼び出し時にソケットアドレスのポート番号に 0 が指定されている。
598 .IP *
599 バインドされていないストリームソケットに対して \fBlisten\fP(2) が呼び出された。
600 .IP *
601 バインドされていないソケットに対して \fBconnect\fP(2)  が呼ばれた。
602 .IP *
603 バインドされていないデータグラムソケットに対して \fBsendto\fP(2)  が呼ばれた。
604 .RE
605 .IP
606 一時ポートに割り当てられるポート番号の範囲は、 \fIip_local_port_range\fP の最初の数字から始まり、 2 番目の数字で終わる。
607 一時ポートの範囲を使い切った場合、 関連するシステムコールはエラーを返す (バグの節を参照)。
608 .IP
609 .\"
610 \fIip_local_port_range\fP で指定するポート番号の範囲は、 マスカレードで用いられているポートと重なってはならない
611 (その場合も取り扱われるが)。 ファイアウォールのパケットフィルターが「利用中のローカルポート」 について何らかの仮定をしている場合には、
612 番号を勝手に決めてしまうと問題が起きるかもしれない。 1 番目の番号は少なくとも 1024 より大きくすべきである。
613 良く使われるポートとの衝突を避けたり、ファイアウォールの問題を 回避したければ、 4096 よりも大きくするほうが良いだろう。
614 .TP 
615 \fIip_no_pmtu_disc\fP (ブール値; デフォルト: 無効; Linux 2.2 以降)
616 .\" Precisely: 2.1.15
617 .\"
618 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
619 有効になっていると、デフォルトで TCP ソケットに対する Path MTU Discoverty を行わない。 Path MTU Discovery
620 は、 正しく設定されていない (ICMP パケットを全てドロップする) ファイアウォールや、 (point\-to\-point リンクで双方の MTU
621 が一致していない場合など)  正しく設定されていないインターフェースが経路上に存在すると失敗してしまう。 Path MTU Discovery
622 をグローバルに無効にするよりは、 壊れているルーターを直すほうが良い。 Path MTU Discovery を無効にするとネットワークのコストが
623 大きくなってしまうからである。
624 .TP 
625 \fIip_nonlocal_bind\fP (ブール値; デフォルト: 無効; Linux 2.4 以降)
626 .\" Precisely: patch-2.4.0-test10
627 .\"
628 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
629 セットされていれば、プロセスが自分以外の IP アドレスを \fBbind\fP(2)
630 できるようになる。これはかなり便利だが、うまく動かないアプリケーションもある。
631 .TP 
632 \fIip6frag_time\fP (integer; default: 30)
633 .\"
634 .\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt
635 IPv6 フラグメントをメモリーに保持しておく時間 (秒単位)。
636 .TP 
637 \fIip6frag_secret_interval\fP (integer; default: 600)
638 IPv6 フラグメントの hash secret の生成間隔 (hash secret の寿命)  (秒単位)。
639 .TP 
640 \fIipfrag_high_thresh\fP (integer), \fIipfrag_low_thresh\fP (integer)
641 キューイングされている IP フラグメントの量が \fIipfrag_high_thresh\fP に達すると、キューの内容は
642 \fIipfrag_low_thresh\fP にまで切り捨てられる。それぞれの大きさを バイト単位で表す整数値が入っている。
643 .TP 
644 \fIneigh/*\fP
645 .\" FIXME Document the conf/*/* interfaces
646 .\"
647 .\" FIXME Document the route/* interfaces
648 \fBarp\fP(7)  を見よ。
649 .SS ioctl
650 .\" 2006-04-02, mtk
651 .\" commented out the following because ipchains is obsolete
652 .\" .PP
653 .\" The ioctls to configure firewalling are documented in
654 .\" .BR ipfw (4)
655 .\" from the
656 .\" .B ipchains
657 .\" package.
658 \fBsocket\fP(7)  に記述されている ioctl は、すべて \fBip\fP にも適用される。
659 .PP
660 .\" FIXME Add a discussion of multicasting
661 ジェネリックデバイスのパラメーターを設定する ioctl については \fBnetdevice\fP(7)  に記述されている。
662 .SH エラー
663 .\" FIXME document all errors.
664 .\"     We should really fix the kernels to give more uniform
665 .\"     error returns (ENOMEM vs ENOBUFS, EPERM vs EACCES etc.)
666 .TP 
667 \fBEACCES\fP
668 必要な権限のないユーザーが操作を実行しようとした。 以下のような場合が考えられる: \fBSO_BROADCAST\fP
669 フラグを設定していない状態でブロードキャストアドレスに パケットを送ろうとした。 \fIprohibit\fP なルートを通してパケットを送ろうとした。
670 スーパーユーザー権限 (\fBCAP_NET_ADMIN\fP ケーパビリティ) なしでファイアウォールの設定を変更しようとした。 スーパーユーザー権限
671 (\fBCAP_NET_BIND_SERVICE\fP ケーパビリティ) なしで特権ポートにバインドしようとした。
672 .TP 
673 \fBEADDRINUSE\fP
674 既に使用されているアドレスにバインドしようとした。
675 .TP 
676 \fBEADDRNOTAVAIL\fP
677 存在しないインターフェースが要求された。または 要求されたソースアドレスがローカルでない。
678 .TP 
679 \fBEAGAIN\fP
680 非ブロッキングソケットに対してブロックする操作を行った。
681 .TP 
682 \fBEALREADY\fP
683 非ブロッキングソケットに対する接続操作が既に実行中である。
684 .TP 
685 \fBECONNABORTED\fP
686 \fBaccept\fP(2)  の途中で接続がクローズされた。
687 .TP 
688 \fBEHOSTUNREACH\fP
689 宛先アドレスにマッチする有効なエントリーがルーティングテーブルに 存在しない。このエラーはリモートルーターからの、
690 あるいはローカルルーティングテーブルへの ICMP メッセージによって引き起こされることがある。
691 .TP 
692 \fBEINVAL\fP
693 不正な引き数が渡された。送信操作において、 \fIblackhole\fP ルートに送信しようとするとこのエラーが起こることがある。
694 .TP 
695 \fBEISCONN\fP
696 接続済みのソケットに対して \fBconnect\fP(2)  が呼ばれた。
697 .TP 
698 \fBEMSGSIZE\fP
699 データグラムが path MTU よりも大きく、フラグメント化もできない。
700 .TP 
701 \fBENOBUFS\fP, \fBENOMEM\fP
702 空きメモリーが足りない。 このエラーは、メモリーアロケーションがソケットバッファーの 大きさによって制限されていることを意味しているのが通常であるが、
703 100% そうだというわけではない。
704 .TP 
705 \fBENOENT\fP
706 パケットが到着していないソケットに対して \fBSIOCGSTAMP\fP が呼ばれた。
707 .TP 
708 \fBENOPKG\fP
709 カーネルサブシステムが設定されていない。
710 .TP 
711 \fBENOPROTOOPT\fP と \fBEOPNOTSUPP\fP
712 無効なソケットオプションが渡された。
713 .TP 
714 \fBENOTCONN\fP
715 接続されていないソケットに対して、 接続状態でしか定義されていない操作を行おうとした。
716 .TP 
717 \fBEPERM\fP
718 高い優先度を設定したり、設定を変更したり、要求されたプロセスや プロセスグループにシグナルを送ったりするのに必要な権限を、 ユーザーが持っていない。
719 .TP 
720 \fBEPIPE\fP
721 接続が接続相手によって、予期しないやり方でクローズまたはシャットダウンされた。
722 .TP 
723 \fBESOCKTNOSUPPORT\fP
724 ソケットが未設定であるか、知らないソケットタイプが要求された。
725 .PP
726 他のエラーが上層のプロトコルによって生じるかもしれない。 \fBtcp\fP(7), \fBraw\fP(7), \fBudp\fP(7), \fBsocket\fP(7)
727 などを参照のこと。
728 .SH 注意
729 .\" IP_PASSSEC is Linux-specific
730 .\" IP_XFRM_POLICY is Linux-specific
731 .\" IP_IPSEC_POLICY is a nonstandard extension, also present on some BSDs
732 \fBIP_FREEBIND\fP, \fBIP_MSFILTER\fP, \fBIP_MTU\fP, \fBIP_MTU_DISCOVER\fP,
733 \fBIP_RECVORIGDSTADDR\fP,
734 \fBIP_PKTINFO\fP, \fBIP_RECVERR\fP, \fBIP_ROUTER_ALERT\fP, and \fBIP_TRANSPARENT\fP
735 は Linux 固有である。
736
737 \fBSO_BROADCAST\fP オプションの利用には、くれぐれも注意すること。
738 これは Linux では特権操作ではない。
739 不注意なブロードキャストを行うと、ネットワークは簡単に過負荷状態になる。
740 新しいアプリケーションプロトコルには、ブロードキャストではなく
741 マルチキャストグループを用いるほうがよい。 ブロードキャストは推奨されない。
742 .PP
743 他の BSD のソケット実装では、 \fBIP_RCVDSTADDR\fP と \fBIP_RECVIF\fP といったソケットオプションがサポートされており、
744 宛先アドレスや受信データグラムのインターフェースが取得できるように なっていることもある。 Linux で同じことをやらせるには、より一般的な
745 \fBIP_PKTINFO\fP が使える。
746 .PP
747 いくつかの BSD のソケット実装では \fBIP_RECVTTL\fP オプションも提供されているが、タイプ \fBIP_RECVTTL\fP
748 の補助メッセージは受信パケットとともに渡される。 これは Linux で使われている \fBIP_TTL\fP オプションとは異なる動作である。
749 .PP
750 \fBSOL_IP\fP ソケットオプションレベルは移植性がない。 BSD ベースのプロトコルスタックでは \fBIPPROTO_IP\fP
751 レベルが使用されている。
752 .SS 移植性
753 Linux 2.0 との互換性のために、 obsolete な \fBsocket(AF_INET, SOCK_PACKET,
754 \fP\fIprotocol\fP\fB)\fP という書式でも \fBpacket\fP(7)  をオープンできるようになっているが、これはお勧めできない。今後は
755 \fBsocket(AF_PACKET, SOCK_RAW, \fP\fIprotocol\fP\fB)\fP
756 を代わりに用いるべきである。主な違いは、ジェネリックなリンク層用の \fIsockaddr_ll\fP アドレス構造体が、古い \fBsockaddr_pkt\fP
757 に変わって用いられるようになったことである。
758 .SH バグ
759 エラーの値がまったく首尾一貫していない。
760 .PP
761 一時ポートの範囲の枯渇を示すのに使われるエラーは、 一時ポートの割り当てを行えるシステムコール (\fBconnect\fP(2), \fBbind\fP(2),
762 \fBlisten\fP(2), \fBsendto\fP(2)) により異なる。
763 .PP
764 .\" .PP
765 .\" Some versions of glibc forget to declare
766 .\" .IR in_pktinfo .
767 .\" Workaround currently is to copy it into your program from this man page.
768 IP 固有のインターフェースオプションを指定するための ioctl と ARP テーブルのことが記述されていない。
769 .PP
770 .\" .SH AUTHORS
771 .\" This man page was written by Andi Kleen.
772 \fBrecvmsg\fP(2)  で \fImsg_name\fP に \fBMSG_ERRQUEUE\fP
773 を指定して、受信パケットに入っていた宛先アドレスを取得する方法は 2.2 カーネルの一部でうまく動かない。
774 .SH 関連項目
775 \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBbyteorder\fP(3), \fBipfw\fP(4),
776 \fBcapabilities\fP(7), \fBicmp\fP(7), \fBipv6\fP(7), \fBnetlink\fP(7), \fBraw\fP(7),
777 \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7)
778 .PP
779 RFC\ 791: 元々の IP 仕様。 RFC\ 1122: IPv4 ホストの要件。 RFC\ 1812: IPv4 ルーターの要件。
780 .SH この文書について
781 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
782 である。プロジェクトの説明とバグ報告に関する情報は
783 http://www.kernel.org/doc/man\-pages/ に書かれている。