OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man7 / ipv6.7
1 .\" This man page is Copyright (C) 2000 Andi Kleen <ak@muc.de>.
2 .\" Permission is granted to distribute possibly modified copies
3 .\" of this page provided the header is included verbatim,
4 .\" and in case of nontrivial modification author and date
5 .\" of the modification is added to the header.
6 .\" $Id: ipv6.7,v 1.4 2001/08/15 18:01:06 hanataka Exp $
7 .\"
8 .\" Japanese Version Copyright (c) 2001 NAKANO Takeo all rights reserved.
9 .\" Translated Sun 18 Feb 2001 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
10 .\" Updated Wed  4 Apr 2001 by Yuichi SATO <ysato@h4.dion.ne.jp>
11 .\" Updated Sat Dec 17 09:31:21 JST 2005 by Yuichi SATO <ysato444@yahoo.co.jp>
12 .\" Updated 2007-05-28, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.50
13 .\" Updated 2008-08-07, Akihiro MOTOKI, LDP v3.05
14 .\"
15 .\"WORD:        flow identifier         フロー指定子
16 .\"WORD:        control message         制御メッセージ
17 .\"WORD:        incoming 〜            受信 (パケット、データグラム)
18 .\"WORD:        outgoing 〜            送信 (パケット、データグラム)
19 .\"WORD:        asynchronous error      非同期エラー
20 .\"
21 .TH IPV6 7 2011-09-08 "Linux" "Linux Programmer's Manual"
22 .SH 名前
23 ipv6, AF_INET6 \- Linux の IPv6 プロトコル実装
24 .SH 書式
25 .B #include <sys/socket.h>
26 .br
27 .B #include <netinet/in.h>
28 .sp
29 .IB tcp6_socket " = socket(AF_INET6, SOCK_STREAM, 0);"
30 .br
31 .IB raw6_socket " = socket(AF_INET6, SOCK_RAW, " protocol ");"
32 .br
33 .IB udp6_socket " = socket(AF_INET6, SOCK_DGRAM, " protocol ");"
34 .SH 説明
35 Linux 2.2 では、Internet Protocol, version 6 を
36 オプションとして実装している。
37 この man ページでは、Linux カーネルと glibc 2.1 での実装に基づいて、
38 IPv6 の基本的な API を解説する。
39 インターフェースは BSD ソケットインターフェースをもとにしている。
40 .BR socket (7)
41 を参照。
42 .PP
43 IPv6 API は、
44 IPv4 API
45 .RB ( ip (7)
46 参照) とほぼ互換になることを目指している。
47 この man ページでは相違点のみを解説する。
48 .PP
49 .B AF_INET6
50 ソケットを何らかのプロセスにバインドするには、
51 ローカルアドレスを
52 .I in6_addr
53 型の変数
54 .I in6addr_any
55 からコピーしてくる必要がある。
56 static な初期値
57 .B IN6ADDR_ANY_INIT
58 も用いることができ、これは定数式に展開される。
59 これらの両者はネットワークバイトオーダーである。
60 .PP
61 IPv6 のループバックアドレス (::1) は global 変数
62 .I in6addr_loopback
63 から取得できる。初期化には
64 .B IN6ADDR_LOOPBACK_INIT
65 を用いるべきである。
66 .PP
67 v4-mapped-on-v6 アドレス型を用いることで、
68 IPv4 接続も v6 API で扱うことができる。
69 こうすれば、プログラムは v6 の API をサポートするだけで、
70 両方のプロトコルをサポートできる。
71 v4-mapped-on-v6 アドレス型は C ライブラリ内部のアドレスを
72 扱う関数によって透過的に処理される。
73 .PP
74 IPv4 と IPv6 はローカルポート空間を共有する。
75 IPv4 の接続 (またはパケット) を IPv6 ソケットが取得すると、
76 発信元アドレスが v6 にマップされ、その接続 (パケット) も v6 にマップされる。
77 .\"nakano: 最後の it がなにを指すのかわからん。
78 .SS アドレスのフォーマット
79 .in +4n
80 .nf
81 struct sockaddr_in6 {
82     sa_family_t     sin6_family;   /* AF_INET6 */
83     in_port_t       sin6_port;     /* port number */
84     uint32_t        sin6_flowinfo; /* IPv6 flow information */
85     struct in6_addr sin6_addr;     /* IPv6 address */
86     uint32_t        sin6_scope_id; /* Scope ID (new in 2.4) */
87 };
88
89 struct in6_addr {
90     unsigned char   s6_addr[16];   /* IPv6 address */
91 };
92 .fi
93 .in
94 .sp
95 .I sin6_family
96 は常に
97 .B AF_INET6
98 に設定される。
99 .I sin6_port
100 はプロトコルポートである
101 .RB ( ip (7)
102
103 .I sin_port
104 を参照)。
105 .I sin6_flowinfo
106 は IPv6 のフロー指定子 (flow identifier) である。
107 .I sin6_addr
108 は 128 ビットの IPv6 アドレスである。
109 .I sin6_scope_id
110 はアドレスのスコープに依存した ID である
111 (これは Linux 2.4 で導入された)。
112 Linux の場合は、これはリンクスコープアドレスでしかサポートされない。
113 この場合
114 .I sin6_scope_id
115 にはインターフェースのインデックスが含まれることになる
116 .RB ( netdevice (7)
117 を参照)。
118 .PP
119 IPv6 は何種類かのアドレスタイプをサポートしている。
120 単一のホストをアドレスするための unicast、
121 ホストのグループをアドレスするための multicast、
122 ホストのグループ中で最も近くにいるものをアドレスするための anycast
123 (これは Linux では実装されていない)、
124 IPv4 ホストをアドレスするための IPv4-on-IPv6。
125 他にも予約済みのアドレスタイプがある。
126 .PP
127 IPv6 でのアドレス表記は 4 桁の 16 進数 8 個からなり、
128 \(aq:\(aq は区切り文字はで、"::" は 0 ビットの文字列を表す。
129 特殊なアドレスとして、ループバックを表す ::1、
130 IPv4-mapped-on-IPv6 を表す ::FFFF::<IPv4 アドレス> がある。
131 .PP
132 IPv6 のポート空間は IPv4 と共有されている。
133 .SS ソケットオプション
134 IPv6 はプロトコル固有のソケットオプションをいくつかサポートしている。
135 これらは
136 .BR setsockopt (2)
137 で設定でき、
138 .BR getsockopt (2)
139 で取得できる。
140 IPv6 のソケットオプションレベルは
141 .B IPPROTO_IPV6
142 である。
143 ブール整数のフラグは、0 が偽であり、それ以外は真である。
144 .TP
145 .B IPV6_ADDRFORM
146 .B AF_INET6
147 ソケットを別のアドレスファミリーのソケットに変える。
148 現在は
149 .B AF_INET
150 のみが変更先のアドレスファミリーとしてサポートされている。
151 これが許可されるのは、IPv6 が接続され、
152 v4-mapped-on-v6 アドレスにバインドされた場合に限られる。
153 引き数は
154 .B AF_INET
155 が入っている整数へのポインタである。
156 v4-mapped ソケットを、IPv6 API を扱えないプログラムに対して
157 ファイルディスクリプターとして渡す場合に便利。
158 .TP
159 .B IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
160 multicast グループのメンバーを制御する。
161 引き数は
162 .I struct ipv6_mreq
163 構造体へのポインタ。
164 .\" FIXME IPV6_CHECKSUM は記述されていないが、記述すべきだろう。
165 .\" FIXME IPV6_JOIN_ANYCAST は記述されていないが、記述すべきだろう。
166 .\" FIXME IPV6_LEAVE_ANYCAST は記述されていないが、記述すべきだろう。
167 .\" FIXME IPV6_RECVPKTINFO は記述されていないが、記述すべきだろう。
168 .\" FIXME IPV6_2292PKTINFO は記述されていないが、記述すべきだろう。
169 .\" FIXME 他にも多くの記述すべき IPV6_* ソケットオプションがあるだろう。
170 .TP
171 .B IPV6_MTU
172 そのソケットに対して用いる MTU の値を設定する。
173 MTU の大きさは、
174 そのデバイスの MTU または (Path MTU Discovery
175 が可能なら) その経路の MTU の大きさ以下でなければならない。
176 引き数は整数へのポインタ。
177 .TP
178 .B IPV6_MTU_DISCOVER
179 そのソケットでの Path MTU Discovery を制御する。
180 詳細は
181 .BR ip (7)
182
183 .B IP_MTU_DISCOVER
184 を参照。
185 .TP
186 .B IPV6_MULTICAST_HOPS
187 そのソケットでの multicast の hop 数の上限値を設定する。
188 引き数は整数へのポインタである。
189 \-1 を指定すると経路のデフォルトを用いることを意味する。
190 それ以外の場合は 0 から 255 の範囲を指定する。
191 .TP
192 .B IPV6_MULTICAST_IF
193 そのソケットでの、送信 multicast パケットに用いるデバイスを設定する。
194 これは
195 .B SOCK_DGRAM
196 および
197 .B SOCK_RAW
198 各ソケットでのみ許される。
199 引き数はインターフェースのインデックスの整数値
200 .RB ( netdevice (7)
201 を参照) へのポインタである。
202 .TP
203 .B IPV6_MULTICAST_LOOP
204 ソケットが、自分自身の送信した
205 multicast パケットを監視するかどうかを制御する。
206 引き数はブール値へのポインタ。
207 .TP
208 .B IPV6_PKTINFO
209 データグラムの到着時における
210 .B IPV6_PKTINFO
211 制御メッセージを配送するかどうかを設定する。
212 .B SOCK_DGRAM
213 ソケットまたは
214 .B SOCK_RAW
215 ソケットに対してのみ許可される。
216 引き数はブール値の入った整数。
217 .TP
218 .nh
219 .B IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
220 .hy
221 受信パケットのデータグラムに拡張ヘッダが含まれている場合の、
222 制御メッセージの配送を設定する。
223 .BR IPV6_RTHDR :
224 routing ヘッダを配送するかどうか。
225 .BR IPV6_AUTHHDR :
226 authentication ヘッダを配送するかどうか。
227 .BR IPV6_DSTOPTS :
228 destination オプションを配送するかどうか。
229 .BR IPV6_HOPOPTS :
230 hop オプションを配送するかどうか。
231 .BR IPV6_FLOWINFO :
232 flow ID を含む整数を配送するかどうか。
233 .BR IPV6_HOPLIMIT :
234 パケットの hop カウントを含む整数を配送するかどうか。
235 制御メッセージはソケットオプションのものと同じタイプを持つ。
236 これらのすべてのヘッダオプションは、
237 適切な制御メッセージを
238 .BR sendmsg (2)
239 の制御バッファーに書きこめば、
240 送信パケットにでも設定できる。
241 .B SOCK_DGRAM
242 ソケットまたは
243 .B SOCK_RAW
244 ソケットでのみ許される。引き数はブール値へのポインタ。
245 .TP
246 .B IPV6_RECVERR
247 非同期エラー (asynchronous error) オプションの受信を制御する。
248 詳細は
249 .BR ip (7)
250
251 .B IP_RECVERR
252 を参照。
253 引き数はブール値へのポインタ。
254 .TP
255 .B IPV6_ROUTER_ALERT
256 このソケットで、router alert hop-by-hop オプションの付いた転送パケットを
257 通すかどうかを制御する。
258 .B SOCK_RAW
259 ソケットでのみ許可される。
260 tap されたパケットはカーネルによっては転送されない。そうしたパケットを
261 再度送信するのはユーザーの責任である。
262 引き数は整数 (integer) へのポインタ。
263 正の整数は傍受を行う router alert オプション値を示す。
264 オプション値がこの整数である router alert オプションの付いたパケットは
265 ソケットに配送される。負の整数を指定すると、このソケットへの
266 router alert オプションの付いたパケットの配送が行われない。
267 .\" FLOWLABEL_MGR, FLOWINFO_SEND
268 .TP
269 .B IPV6_UNICAST_HOPS
270 そのソケットでの unicast の hop 数の上限値を設定する。
271 引き数は整数へのポインタである。
272 \-1 を指定すると経路のデフォルトを用いることを意味する。
273 それ以外の場合は 0 から 255 の範囲を指定する。
274 .TP
275 .BR IPV6_V6ONLY " (Linux 2.4.21 以降および 2.6 以降)"
276 .\" See RFC 3493
277 このフラグを真 (0 以外) に設定すると、そのソケットは IPv6 パケットだけを
278 送受信するように制限される。
279 この場合、IPv4 アプリケーションと IPv6 アプリケーションが同時に
280 一つのポートをバインドできる。
281
282 このフラグを偽 (0) に設定すると、そのソケットはパケットの送受信に
283 IPv6 アドレスと IPv4-mapped IPv6 アドレスの両方を使用できる。
284
285 引き数はブール値の入った整数へのポインタである。
286
287 このフラグのデフォルト値はファイル
288 .I /proc/sys/net/ipv6/bindv6only
289 の内容により定義される。
290 このファイルのデフォルト値は 0 (偽) である。
291 .SH バージョン
292 IPv6 API を libc5 ベースで Linux 向けに実装した、以前の
293 .I libinet6
294 についてはここでは記述していない。
295 おそらく細かいところには相違点があるだろう。
296 .PP
297 Linux 2.4 では 64 ビットのホストに対して
298 .I sockaddr_in6
299 のバイナリ互換性が保たれていない。
300 .I in6_addr
301 のアラインメントが変更され、また
302 .I sin6_scope_id
303 フィールドが新たに追加されたからである。
304 カーネルインターフェースの互換性は保たれているが、
305 .I sockaddr_in6
306
307 .I in6_addr
308 を他の構造体に含んでいるようなプログラムでは
309 保たれないかもしれない。
310 これは i386 のような 32 ビットのホストでは問題にならない。
311 .PP
312 .I sin6_flowinfo
313 フィールドは Linux 2.4 で登場した。
314 これが渡されたアドレス長に含まれていると、
315 カーネルに透過的に渡され、読まれる。
316 .\"nakano ここわからないです...
317 より長いアドレスバッファを渡し、
318 そして送信アドレスの長さをチェックするようなプログラムは
319 うまく動かないかもしれない。
320 .SH 注意
321 .I sockaddr_in6
322 構造体はジェネリックな
323 .I sockaddr
324 よりも大きい。
325 すべてのアドレスタイプが
326 .I struct sockaddr
327 の中に安全に納められると仮定しているプログラムは、代わりに
328 .I struct sockaddr_storage
329 を用いるように変更する必要がある。
330 .SH バグ
331 IPv6 拡張 API は、現在まだ RFC\ 2292 を完全には実装していない。
332 2.2 カーネルは受信オプションをほぼ完全にサポートサポートしているが、
333 glibc2.1 には IPv6 オプションを生成するマクロが存在していない。
334 .PP
335 EH および AH ヘッダ での IPSec のサポートは存在しない。
336 .PP
337 フローラベル管理はまだ完全でなく、ここにも記述されていない。
338 .PP
339 この man ページはまだ完成していない。
340 .SH 関連項目
341 .BR cmsg (3),
342 .BR ip (7)
343 .LP
344 RFC\ 2553: IPv6 BASIC API.
345 Linux はこの RFC に準拠するようにしている。
346 .LP
347 RFC\ 2460: IPv6 specification.