OSDN Git Service

(split) LDP: Update release pages
[linuxjm/LDP_man-pages.git] / release / man7 / ipv6.7
1 .\" This man page is Copyright (C) 2000 Andi Kleen <ak@muc.de>.
2 .\"
3 .\" %%%LICENSE_START(VERBATIM_ONE_PARA)
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 .\" %%%LICENSE_END
9 .\"
10 .\" $Id: ipv6.7,v 1.3 2000/12/20 18:10:31 ak Exp $
11 .\"
12 .\" The following socket options are undocumented
13 .\"     All of the folloing are from:
14 .\"         commit 333fad5364d6b457c8d837f7d05802d2aaf8a961
15 .\"         Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
16 .\"         Support several new sockopt / ancillary data in Advanced API (RFC3542).
17 .\"             IPV6_2292PKTINFO (2.6.14)
18 .\"                 Formerly IPV6_PKTINFO
19 .\"             IPV6_2292HOPOPTS (2.6.14)
20 .\"                 Formerly IPV6_HOPOPTS, which is documented
21 .\"             IPV6_2292DSTOPTS (2.6.14)
22 .\"                 Formerly IPV6_DSTOPTS, which is documented
23 .\"             IPV6_2292RTHDR (2.6.14)
24 .\"                 Formerly IPV6_RTHDR, which is documented
25 .\"             IPV6_2292PKTOPTIONS (2.6.14)
26 .\"                 Formerly IPV6_PKTOPTIONS
27 .\"             IPV6_2292HOPLIMIT (2.6.14)
28 .\"                 Formerly IPV6_HOPLIMIT, which is documented
29 .\"
30 .\"             IPV6_RECVHOPLIMIT (2.6.14)
31 .\"             IPV6_RECVHOPOPTS (2.6.14)
32 .\"             IPV6_RTHDRDSTOPTS (2.6.14)
33 .\"             IPV6_RECVRTHDR (2.6.14)
34 .\"             IPV6_RECVDSTOPTS (2.6.14)
35 .\"
36 .\"     IPV6_RECVPATHMTU (2.6.35, flag value added in 2.6.14)
37 .\"         commit 793b14731686595a741d9f47726ad8b9a235385a
38 .\"         Author: Brian Haley <brian.haley@hp.com>
39 .\"     IPV6_PATHMTU (2.6.35, flag value added in 2.6.14)
40 .\"         commit 793b14731686595a741d9f47726ad8b9a235385a
41 .\"         Author: Brian Haley <brian.haley@hp.com>
42 .\"     IPV6_DONTFRAG (2.6.35, flag value added in 2.6.14)
43 .\"         commit 793b14731686595a741d9f47726ad8b9a235385a
44 .\"         Author: Brian Haley <brian.haley@hp.com>
45 .\"         commit 4b340ae20d0e2366792abe70f46629e576adaf5e
46 .\"         Author: Brian Haley <brian.haley@hp.com>
47 .\"
48 .\"     IPV6_RECVTCLASS (2.6.14)
49 .\"         commit 41a1f8ea4fbfcdc4232f023732584aae2220de31
50 .\"         Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
51 .\"             Based on patch from David L Stevens <dlstevens@us.ibm.com>
52 .\"
53 .\"     IPV6_CHECKSUM (2.2)
54 .\"     IPV6_NEXTHOP (2.2)
55 .\"     IPV6_JOIN_ANYCAST (2.4.21 / 2.6)
56 .\"     IPV6_LEAVE_ANYCAST (2.4.21 / 2.6)
57 .\"     IPV6_FLOWLABEL_MGR (2.2.7 / 2.4)
58 .\"     IPV6_FLOWINFO_SEND (2.2.7 / 2.4)
59 .\"     IPV6_IPSEC_POLICY (2.6)
60 .\"     IPV6_XFRM_POLICY (2.6)
61 .\"     IPV6_TCLASS (2.6)
62 .\"
63 .\"     IPV6_ADDR_PREFERENCES (2.6.26)
64 .\"         commit 7cbca67c073263c179f605bdbbdc565ab29d801d
65 .\"         Author: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
66 .\"     IPV6_MINHOPCOUNT (2.6.35)
67 .\"         commit e802af9cabb011f09b9c19a82faef3dd315f27eb
68 .\"         Author: Stephen Hemminger <shemminger@vyatta.com>
69 .\"     IPV6_ORIGDSTADDR (2.6.37)
70 .\"         Actually a CMSG rather than a sockopt?
71 .\"         In header file, we have IPV6_RECVORIGDSTADDR == IPV6_ORIGDSTADDR
72 .\"         commit 6c46862280c5f55eda7750391bc65cd7e08c7535
73 .\"         Author: Balazs Scheidler <bazsi@balabit.hu>
74 .\"     IPV6_RECVORIGDSTADDR (2.6.37)
75 .\"         commit 6c46862280c5f55eda7750391bc65cd7e08c7535
76 .\"         Author: Balazs Scheidler <bazsi@balabit.hu>
77 .\"             Support for IPV6_RECVORIGDSTADDR sockopt for UDP sockets
78 .\"             were contributed by Harry Mason.
79 .\"     IPV6_TRANSPARENT (2.6.37)
80 .\"         commit 6c46862280c5f55eda7750391bc65cd7e08c7535
81 .\"         Author: Balazs Scheidler <bazsi@balabit.hu>
82 .\"     IPV6_UNICAST_IF (3.4)
83 .\"         commit c4062dfc425e94290ac427a98d6b4721dd2bc91f
84 .\"         Author: Erich E. Hoover <ehoover@mines.edu>
85 .\"
86 .\"*******************************************************************
87 .\"
88 .\" This file was generated with po4a. Translate the source file.
89 .\"
90 .\"*******************************************************************
91 .\"
92 .\" Japanese Version Copyright (c) 2001 NAKANO Takeo all rights reserved.
93 .\" Translated Sun 18 Feb 2001 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
94 .\" Updated Wed  4 Apr 2001 by Yuichi SATO <ysato@h4.dion.ne.jp>
95 .\" Updated Sat Dec 17 09:31:21 JST 2005 by Yuichi SATO <ysato444@yahoo.co.jp>
96 .\" Updated 2007-05-28, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.50
97 .\" Updated 2008-08-07, Akihiro MOTOKI, LDP v3.05
98 .\" Updated 2012-05-31, Akihiro MOTOKI <amotoki@gmail.com>
99 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
100 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
101 .\"
102 .TH IPV6 7 2012\-12\-16 Linux "Linux Programmer's Manual"
103 .SH 名前
104 ipv6 \- Linux IPv6 プロトコルの実装
105 .SH 書式
106 \fB#include <sys/socket.h>\fP
107 .br
108 \fB#include <netinet/in.h>\fP
109 .sp
110 \fItcp6_socket\fP\fB = socket(AF_INET6, SOCK_STREAM, 0);\fP
111 .br
112 \fIraw6_socket\fP\fB = socket(AF_INET6, SOCK_RAW, \fP\fIprotocol\fP\fB);\fP
113 .br
114 \fIudp6_socket\fP\fB = socket(AF_INET6, SOCK_DGRAM, \fP\fIprotocol\fP\fB);\fP
115 .SH 説明
116 Linux 2.2 では、Internet Protocol, version 6 を オプションとして実装している。 この man
117 ページでは、Linux カーネルと glibc 2.1 での実装に基づいて、 IPv6 の基本的な API を解説する。 インターフェースは BSD
118 ソケットインターフェースをもとにしている。 \fBsocket\fP(7)  を参照。
119 .PP
120 IPv6 API は、 IPv4 API (\fBip\fP(7)  参照) とほぼ互換になることを目指している。 この man
121 ページでは相違点のみを解説する。
122 .PP
123 \fBAF_INET6\fP ソケットを何らかのプロセスにバインドするには、 ローカルアドレスを \fIin6_addr\fP 型の変数
124 \fIin6addr_any\fP からコピーしてくる必要がある。 static な初期値 \fBIN6ADDR_ANY_INIT\fP
125 も用いることができ、これは定数式に展開される。 これらの両者はネットワークバイトオーダーである。
126 .PP
127 IPv6 のループバックアドレス (::1) は global 変数 \fIin6addr_loopback\fP から取得できる。初期化には
128 \fBIN6ADDR_LOOPBACK_INIT\fP を用いるべきである。
129 .PP
130 v4\-mapped\-on\-v6 アドレス型を用いることで、 IPv4 接続も v6 API で扱うことができる。 こうすれば、プログラムは v6 の
131 API をサポートするだけで、 両方のプロトコルをサポートできる。 v4\-mapped\-on\-v6 アドレス型は C ライブラリ内部のアドレスを
132 扱う関数によって透過的に処理される。
133 .PP
134 IPv4 と IPv6 はローカルポート空間を共有する。 IPv4 の接続 (またはパケット) を IPv6 ソケットが取得すると、 発信元アドレスが
135 v6 にマップされ、その接続 (パケット) も v6 にマップされる。
136 .SS アドレスのフォーマット
137 .in +4n
138 .nf
139 struct sockaddr_in6 {
140     sa_family_t     sin6_family;   /* AF_INET6 */
141     in_port_t       sin6_port;     /* port number */
142     uint32_t        sin6_flowinfo; /* IPv6 flow information */
143     struct in6_addr sin6_addr;     /* IPv6 address */
144     uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */
145 };
146
147 struct in6_addr {
148     unsigned char   s6_addr[16];   /* IPv6 address */
149 };
150 .fi
151 .in
152 .sp
153 \fIsin6_family\fP は常に \fBAF_INET6\fP に設定される。
154 \fIsin6_port\fP はプロトコルポートである (\fBip\fP(7) の \fIsin_port\fP を参照)。
155 \fIsin6_flowinfo\fP は IPv6 のフロー指定子 (flow identifier) である。
156 \fIsin6_addr\fP は 128 ビットの IPv6 アドレスである。 \fIsin6_scope_id\fP は
157 アドレスのスコープに依存した ID である (これは Linux 2.4 で導入された)。
158 Linux の場合は、これはリンクローカルアドレスでのみサポートされている。
159 この場合 \fIsin6_scope_id\fP にはインターフェースのインデックスが含まれる
160 ことになる (\fBnetdevice\fP(7) を参照)。
161 .PP
162 IPv6 は何種類かのアドレスタイプをサポートしている。 単一のホストをアドレスするための unicast、 ホストのグループをアドレスするための
163 multicast、 ホストのグループ中で最も近くにいるものをアドレスするための anycast (これは Linux では実装されていない)、
164 IPv4 ホストをアドレスするための IPv4\-on\-IPv6。 他にも予約済みのアドレスタイプがある。
165 .PP
166 IPv6 でのアドレス表記は 4 桁の 16 進数 8 個からなり、 \(aq:\(aq は区切り文字はで、"::" は 0 ビットの文字列を表す。
167 特殊なアドレスとして、ループバックを表す ::1、 IPv4\-mapped\-on\-IPv6 を表す ::FFFF::<IPv4
168 アドレス> がある。
169 .PP
170 IPv6 のポート空間は IPv4 と共有されている。
171 .SS ソケットオプション
172 IPv6 はプロトコル固有のソケットオプションをいくつかサポートしている。 これらは \fBsetsockopt\fP(2)  で設定でき、
173 \fBgetsockopt\fP(2)  で取得できる。 IPv6 のソケットオプションレベルは \fBIPPROTO_IPV6\fP である。
174 ブール整数のフラグは、0 が偽であり、それ以外は真である。
175 .TP 
176 \fBIPV6_ADDRFORM\fP
177 \fBAF_INET6\fP ソケットを別のアドレスファミリーのソケットに変える。 現在は \fBAF_INET\fP
178 のみが変更先のアドレスファミリーとしてサポートされている。 これが許可されるのは、IPv6 が接続され、 v4\-mapped\-on\-v6
179 アドレスにバインドされた場合に限られる。 引き数は \fBAF_INET\fP が入っている整数へのポインタである。 v4\-mapped ソケットを、IPv6
180 API を扱えないプログラムに対して ファイルディスクリプターとして渡す場合に便利。
181 .TP 
182 \fBIPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP\fP
183 multicast グループのメンバーを制御する。 引き数は \fIstruct ipv6_mreq\fP 構造体へのポインタ。
184 .TP 
185 \fBIPV6_MTU\fP
186 \fBgetsockopt\fP(): ソケットの、既知の path MTU を取得する。ソケットが接続している場合のみ有効である。整数を返す。
187
188 \fBsetsockopt\fP(): そのソケットに対して用いる MTU の値を設定する。 MTU の大きさは、 そのデバイスの MTU または (Path
189 MTU Discovery が可能なら) その経路の MTU の大きさ以下でなければならない。 引き数は整数へのポインタ。
190 .TP 
191 \fBIPV6_MTU_DISCOVER\fP
192 そのソケットでの Path MTU Discovery を制御する。 詳細は \fBip\fP(7)  の \fBIP_MTU_DISCOVER\fP を参照。
193 .TP 
194 \fBIPV6_MULTICAST_HOPS\fP
195 そのソケットでの multicast の hop 数の上限値を設定する。 引き数は整数へのポインタである。 \-1
196 を指定すると経路のデフォルトを用いることを意味する。 それ以外の場合は 0 から 255 の範囲を指定する。
197 .TP 
198 \fBIPV6_MULTICAST_IF\fP
199 そのソケットでの、送信 multicast パケットに用いるデバイスを設定する。 これは \fBSOCK_DGRAM\fP および \fBSOCK_RAW\fP
200 各ソケットでのみ許される。 引き数はインターフェースのインデックスの整数値 (\fBnetdevice\fP(7)  を参照) へのポインタである。
201 .TP 
202 \fBIPV6_MULTICAST_LOOP\fP
203 ソケットが、自分自身の送信した multicast パケットを監視するかどうかを制御する。 引き数はブール値へのポインタ。
204 .TP 
205 \fBIPV6_RECVPKTINFO\fP (Linux 2.6.14 以降)
206 データグラムの到着時における \fBIPV6_PKTINFO\fP 制御メッセージを配送するかどうかを設定する。 制御メッセージは RFC 3542 に基づき
207 \fIstruct in6_pktinfo\fP に格納される。 \fBSOCK_DGRAM\fP ソケットまたは \fBSOCK_RAW\fP
208 ソケットに対してのみ許可される。 引き数はブール値の入った整数。
209 .TP 
210 .nh
211 \fBIPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO,
212 IPV6_HOPLIMIT\fP
213 .hy
214 受信パケットのデータグラムに拡張ヘッダが含まれている場合の、 制御メッセージの配送を設定する。 \fBIPV6_RTHDR\fP: routing
215 ヘッダを配送するかどうか。 \fBIPV6_AUTHHDR\fP: authentication ヘッダを配送するかどうか。 \fBIPV6_DSTOPTS\fP:
216 destination オプションを配送するかどうか。 \fBIPV6_HOPOPTS\fP: hop オプションを配送するかどうか。
217 \fBIPV6_FLOWINFO\fP: flow ID を含む整数を配送するかどうか。 \fBIPV6_HOPLIMIT\fP: パケットの hop
218 カウントを含む整数を配送するかどうか。 制御メッセージはソケットオプションのものと同じタイプを持つ。 これらのすべてのヘッダオプションは、
219 適切な制御メッセージを \fBsendmsg\fP(2)  の制御バッファーに書きこめば、 送信パケットにでも設定できる。 \fBSOCK_DGRAM\fP
220 ソケットまたは \fBSOCK_RAW\fP ソケットでのみ許される。引き数はブール値へのポインタ。
221 .TP 
222 \fBIPV6_RECVERR\fP
223 非同期エラー (asynchronous error) オプションの受信を制御する。 詳細は \fBip\fP(7)  の \fBIP_RECVERR\fP
224 を参照。 引き数はブール値へのポインタ。
225 .TP 
226 \fBIPV6_ROUTER_ALERT\fP
227 このソケットで、router alert hop\-by\-hop オプションの付いた転送パケットを 通すかどうかを制御する。 \fBSOCK_RAW\fP
228 ソケットでのみ許可される。 tap されたパケットはカーネルによっては転送されない。そうしたパケットを 再度送信するのはユーザーの責任である。
229 引き数は整数 (integer) へのポインタ。 正の整数は傍受を行う router alert オプション値を示す。 オプション値がこの整数である
230 router alert オプションの付いたパケットは ソケットに配送される。負の整数を指定すると、このソケットへの router alert
231 オプションの付いたパケットの配送が行われない。
232 .TP 
233 \fBIPV6_UNICAST_HOPS\fP
234 そのソケットでの unicast の hop 数の上限値を設定する。 引き数は整数へのポインタである。 \-1
235 を指定すると経路のデフォルトを用いることを意味する。 それ以外の場合は 0 から 255 の範囲を指定する。
236 .TP 
237 \fBIPV6_V6ONLY\fP (Linux 2.4.21 以降および 2.6 以降)
238 .\" See RFC 3493
239 このフラグを真 (0 以外) に設定すると、そのソケットは IPv6 パケットだけを 送受信するように制限される。 この場合、IPv4
240 アプリケーションと IPv6 アプリケーションが同時に 一つのポートをバインドできる。
241
242 このフラグを偽 (0) に設定すると、そのソケットはパケットの送受信に IPv6 アドレスと IPv4\-mapped IPv6
243 アドレスの両方を使用できる。
244
245 引き数はブール値の入った整数へのポインタである。
246
247 .\" FLOWLABEL_MGR, FLOWINFO_SEND
248 このフラグのデフォルト値はファイル \fI/proc/sys/net/ipv6/bindv6only\fP の内容により定義される。
249 このファイルのデフォルト値は 0 (偽) である。
250 .SH エラー
251 .\" FIXME document all errors.
252 .TP 
253 \fBENODEV\fP
254 ユーザがリンクローカルの IPv6 アドレスを \fBbind\fP(2) しようとしたが、
255 指定された \fIsockaddr_in6\fP 構造体の \fIsin6_scope_id\fP が
256 有効なインターフェースのインデックスでなかった。
257 .SH バージョン
258 IPv6 API を libc5 ベースで Linux 向けに実装した、以前の \fIlibinet6\fP についてはここでは記述していない。
259 おそらく細かいところには相違点があるだろう。
260 .PP
261 Linux 2.4 では 64 ビットのホストに対して \fIsockaddr_in6\fP のバイナリ互換性が保たれていない。 \fIin6_addr\fP
262 のアラインメントが変更され、また \fIsin6_scope_id\fP フィールドが新たに追加されたからである。
263 カーネルインターフェースの互換性は保たれているが、 \fIsockaddr_in6\fP や \fIin6_addr\fP
264 を他の構造体に含んでいるようなプログラムでは 保たれないかもしれない。 これは i386 のような 32 ビットのホストでは問題にならない。
265 .PP
266 \fIsin6_flowinfo\fP フィールドは Linux 2.4 で登場した。 これが渡されたアドレス長に含まれていると、
267 カーネルに透過的に渡され、読まれる。 より長いアドレスバッファを渡し、 そして送信アドレスの長さをチェックするようなプログラムは
268 うまく動かないかもしれない。
269 .SH 注意
270 \fIsockaddr_in6\fP 構造体はジェネリックな \fIsockaddr\fP よりも大きい。 すべてのアドレスタイプが \fIstruct
271 sockaddr\fP の中に安全に納められると仮定しているプログラムは、代わりに \fIstruct sockaddr_storage\fP
272 を用いるように変更する必要がある。
273 .SH バグ
274 IPv6 拡張 API は、現在まだ RFC\ 2292 を完全には実装していない。 2.2
275 カーネルは受信オプションをほぼ完全にサポートサポートしているが、 glibc2.1 には IPv6 オプションを生成するマクロが存在していない。
276 .PP
277 EH および AH ヘッダ での IPSec のサポートは存在しない。
278 .PP
279 フローラベル管理はまだ完全でなく、ここにも記述されていない。
280 .PP
281 この man ページはまだ完成していない。
282 .SH 関連項目
283 \fBcmsg\fP(3), \fBip\fP(7)
284 .PP
285 RFC\ 2553: IPv6 BASIC API; Linux はこの RFC に準拠するようにしている。 RFC\ 2460: IPv6
286 specification.
287 .SH この文書について
288 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
289 である。プロジェクトの説明とバグ報告に関する情報は
290 http://www.kernel.org/doc/man\-pages/ に書かれている。