aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/en/books/developers-handbook/ipv6/_index.po
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/en/books/developers-handbook/ipv6/_index.po')
-rw-r--r--documentation/content/en/books/developers-handbook/ipv6/_index.po2135
1 files changed, 2135 insertions, 0 deletions
diff --git a/documentation/content/en/books/developers-handbook/ipv6/_index.po b/documentation/content/en/books/developers-handbook/ipv6/_index.po
new file mode 100644
index 0000000000..aa7d2bd4aa
--- /dev/null
+++ b/documentation/content/en/books/developers-handbook/ipv6/_index.po
@@ -0,0 +1,2135 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: Title =
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:16
+#, no-wrap
+msgid "IPv6 Internals"
+msgstr ""
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:1
+#, no-wrap
+msgid "Chapter 8. IPv6 Internals"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:54
+#, no-wrap
+msgid "IPv6/IPsec Implementation"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:58
+msgid ""
+"This section should explain IPv6 and IPsec related implementation "
+"internals. These functionalities are derived from http://www.kame.net/[KAME "
+"project]"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:60
+#, no-wrap
+msgid "IPv6"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:62
+#, no-wrap
+msgid "Conformance"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:66
+msgid ""
+"The IPv6 related functions conforms, or tries to conform to the latest set "
+"of IPv6 specifications. For future reference we list some of the relevant "
+"documents below (_NOTE_: this is not a complete list - this is too hard to "
+"maintain...)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:68
+msgid ""
+"For details please refer to specific chapter in the document, RFCs, manual "
+"pages, or comments in the source code."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:72
+msgid ""
+"Conformance tests have been performed on the KAME STABLE kit at TAHI "
+"project. Results can be viewed at http://www.tahi.org/report/KAME/[http://"
+"www.tahi.org/report/KAME/]. We also attended University of New Hampshire "
+"IOL tests (http://www.iol.unh.edu/[http://www.iol.unh.edu/]) in the past, "
+"with our past snapshots."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:74
+msgid "RFC1639: FTP Operation Over Big Address Records (FOOBAR)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:76
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:113
+msgid ""
+"RFC2428 is preferred over RFC1639. FTP clients will first try RFC2428, then "
+"RFC1639 if failed."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:78
+msgid "RFC1886: DNS Extensions to support IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:79
+msgid "RFC1933: Transition Mechanisms for IPv6 Hosts and Routers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:81
+msgid "IPv4 compatible address is not supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:82
+msgid "automatic tunneling (described in 4.3 of this RFC) is not supported."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:84
+msgid ""
+"man:gif[4] interface implements IPv[46]-over-IPv[46] tunnel in a generic "
+"way, and it covers \"configured tunnel\" described in the spec. See "
+"crossref:ipv6[gif,23.5.1.5] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:86
+msgid "RFC1981: Path MTU Discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:87
+msgid "RFC2080: RIPng for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:89
+msgid "usr.sbin/route6d support this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:91
+msgid "RFC2292: Advanced Sockets API for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:93
+msgid ""
+"For supported library functions/kernel APIs, see [.filename]#sys/netinet6/"
+"ADVAPI#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:95
+msgid "RFC2362: Protocol Independent Multicast-Sparse Mode (PIM-SM)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:97
+msgid ""
+"RFC2362 defines packet formats for PIM-SM. [.filename]#draft-ietf-pim-"
+"ipv6-01.txt# is written based on this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:99
+msgid "RFC2373: IPv6 Addressing Architecture"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:101
+msgid ""
+"supports node required addresses, and conforms to the scope requirement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:103
+msgid "RFC2374: An IPv6 Aggregatable Global Unicast Address Format"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:105
+msgid "supports 64-bit length of Interface ID."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:107
+msgid "RFC2375: IPv6 Multicast Address Assignments"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:109
+msgid "Userland applications use the well-known addresses assigned in the RFC."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:111
+msgid "RFC2428: FTP Extensions for IPv6 and NATs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:115
+msgid "RFC2460: IPv6 specification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:116
+msgid "RFC2461: Neighbor discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:118
+msgid ""
+"See crossref:ipv6[neighbor-discovery,23.5.1.2] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:120
+msgid "RFC2462: IPv6 Stateless Address Autoconfiguration"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:122
+msgid "See crossref:ipv6[ipv6-pnp,23.5.1.4] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:124
+msgid "RFC2463: ICMPv6 for IPv6 specification"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:126
+msgid "See crossref:ipv6[icmpv6,23.5.1.9] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:128
+msgid "RFC2464: Transmission of IPv6 Packets over Ethernet Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:129
+msgid "RFC2465: MIB for IPv6: Textual Conventions and General Group"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:131
+msgid ""
+"Necessary statistics are gathered by the kernel. Actual IPv6 MIB support is "
+"provided as a patchkit for ucd-snmp."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:133
+msgid "RFC2466: MIB for IPv6: ICMPv6 group"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:135
+msgid ""
+"Necessary statistics are gathered by the kernel. Actual IPv6 MIB support is "
+"provided as patchkit for ucd-snmp."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:137
+msgid "RFC2467: Transmission of IPv6 Packets over FDDI Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:138
+msgid "RFC2497: Transmission of IPv6 packet over ARCnet Networks"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:139
+msgid "RFC2553: Basic Socket Interface Extensions for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:142
+msgid ""
+"IPv4 mapped address (3.7) and special behavior of IPv6 wildcard bind socket "
+"(3.8) are supported. See crossref:ipv6[ipv6-wildcard-socket,23.5.1.12] in "
+"this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:144
+msgid "RFC2675: IPv6 Jumbograms"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:146
+msgid "See crossref:ipv6[ipv6-jumbo,23.5.1.7] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:148
+msgid "RFC2710: Multicast Listener Discovery for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:149
+msgid "RFC2711: IPv6 router alert option"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:150
+msgid ""
+"[.filename]#draft-ietf-ipngwg-router-renum-08#: Router renumbering for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:151
+msgid ""
+"[.filename]#draft-ietf-ipngwg-icmp-namelookups-02#: IPv6 Name Lookups "
+"Through ICMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:152
+msgid ""
+"[.filename]#draft-ietf-ipngwg-icmp-name-lookups-03#: IPv6 Name Lookups "
+"Through ICMP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:153
+msgid "[.filename]#draft-ietf-pim-ipv6-01.txt#: PIM for IPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:155
+msgid ""
+"man:pim6dd[8] implements dense mode. man:pim6sd[8] implements sparse mode."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:157
+msgid ""
+"[.filename]#draft-itojun-ipv6-tcp-to-anycast-00#: Disconnecting TCP "
+"connection toward IPv6 anycast address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:158
+msgid "[.filename]#draft-yamamoto-wideipv6-comm-model-00#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:160
+msgid "See crossref:ipv6[ipv6-sas,23.5.1.6] in this document for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:162
+msgid ""
+"[.filename]#draft-ietf-ipngwg-scopedaddr-format-00.txt#: An Extension of "
+"Format for IPv6 Scoped Addresses"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:164
+#, no-wrap
+msgid "Neighbor Discovery"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:169
+msgid ""
+"Neighbor Discovery is fairly stable. Currently Address Resolution, "
+"Duplicated Address Detection, and Neighbor Unreachability Detection are "
+"supported. In the near future we will be adding Proxy Neighbor "
+"Advertisement support in the kernel and Unsolicited Neighbor Advertisement "
+"transmission command as admin tool."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:174
+msgid ""
+"If DAD fails, the address will be marked \"duplicated\" and message will be "
+"generated to syslog (and usually to console). The \"duplicated\" mark can "
+"be checked with man:ifconfig[8]. It is administrators' responsibility to "
+"check for and recover from DAD failures. The behavior should be improved in "
+"the near future."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:178
+msgid ""
+"Some of the network driver loops multicast packets back to itself, even if "
+"instructed not to do so (especially in promiscuous mode). In such cases DAD "
+"may fail, because DAD engine sees inbound NS packet (actually from the node "
+"itself) and considers it as a sign of duplicate. You may want to look at "
+"#if condition marked \"heuristics\" in sys/netinet6/"
+"nd6_nbr.c:nd6_dad_timer() as workaround (note that the code fragment in "
+"\"heuristics\" section is not spec conformant)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:180
+msgid ""
+"Neighbor Discovery specification (RFC2461) does not talk about neighbor "
+"cache handling in the following cases:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:182
+msgid ""
+"when there was no neighbor cache entry, node received unsolicited RS/NS/NA/"
+"redirect packet without link-layer address"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:183
+msgid ""
+"neighbor cache handling on medium without link-layer address (we need a "
+"neighbor cache entry for IsRouter bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:186
+msgid ""
+"For first case, we implemented workaround based on discussions on IETF "
+"ipngwg mailing list. For more details, see the comments in the source code "
+"and email thread started from (IPng 7155), dated Feb 6 1999."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:189
+msgid ""
+"IPv6 on-link determination rule (RFC2461) is quite different from "
+"assumptions in BSD network code. At this moment, no on-link determination "
+"rule is supported where default router list is empty (RFC2461, section 5.2, "
+"last sentence in 2nd paragraph - note that the spec misuse the word \"host\" "
+"and \"node\" in several places in the section)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:194
+msgid ""
+"To avoid possible DoS attacks and infinite loops, only 10 options on ND "
+"packet is accepted now. Therefore, if you have 20 prefix options attached "
+"to RA, only the first 10 prefixes will be recognized. If this troubles you, "
+"please ask it on FREEBSD-CURRENT mailing list and/or modify nd6_maxndopt in "
+"[.filename]#sys/netinet6/nd6.c#. If there are high demands we may provide "
+"sysctl knob for the variable."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:196
+#, no-wrap
+msgid "Scope Index"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:201
+msgid ""
+"IPv6 uses scoped addresses. Therefore, it is very important to specify "
+"scope index (interface index for link-local address, or site index for site-"
+"local address) with an IPv6 address. Without scope index, scoped IPv6 "
+"address is ambiguous to the kernel, and kernel will not be able to determine "
+"the outbound interface for a packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:206
+msgid ""
+"Ordinary userland applications should use advanced API (RFC2292) to specify "
+"scope index, or interface index. For similar purpose, sin6_scope_id member "
+"in sockaddr_in6 structure is defined in RFC2553. However, the semantics for "
+"sin6_scope_id is rather vague. If you care about portability of your "
+"application, we suggest you to use advanced API rather than sin6_scope_id."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:209
+msgid ""
+"In the kernel, an interface index for link-local scoped address is embedded "
+"into 2nd 16bit-word (3rd and 4th byte) in IPv6 address. For example, you "
+"may see something like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:213
+#, no-wrap
+msgid "\tfe80:1::200:f8ff:fe01:6317\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:218
+msgid ""
+"in the routing table and interface address structure (struct in6_ifaddr). "
+"The address above is a link-local unicast address which belongs to a network "
+"interface whose interface identifier is 1. The embedded index enables us to "
+"identify IPv6 link local addresses over multiple interfaces effectively and "
+"with only a little code change."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:223
+msgid ""
+"Routing daemons and configuration programs, like man:route6d[8] and "
+"man:ifconfig[8], will need to manipulate the \"embedded\" scope index. "
+"These programs use routing sockets and ioctls (like SIOCGIFADDR_IN6) and the "
+"kernel API will return IPv6 addresses with 2nd 16bit-word filled in. The "
+"APIs are for manipulating kernel internal structure. Programs that use "
+"these APIs have to be prepared about differences in kernels anyway."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:230
+msgid ""
+"When you specify scoped address to the command line, NEVER write the "
+"embedded form (such as ff02:1::1 or fe80:2::fedc). This is not supposed to "
+"work. Always use standard form, like ff02::1 or fe80::fedc, with command "
+"line option for specifying interface (like `ping -6 -I ne0 ff02::1`). In "
+"general, if a command does not have command line option to specify outgoing "
+"interface, that command is not ready to accept scoped address. This may "
+"seem to be opposite from IPv6's premise to support \"dentist office\" "
+"situation. We believe that specifications need some improvements for this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:234
+msgid ""
+"Some of the userland tools support extended numeric IPv6 syntax, as "
+"documented in [.filename]#draft-ietf-ipngwg-scopedaddr-format-00.txt#. You "
+"can specify outgoing link, by using name of the outgoing interface like "
+"\"fe80::1%ne0\". This way you will be able to specify link-local scoped "
+"address without much trouble."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:237
+msgid ""
+"To use this extension in your program, you will need to use "
+"man:getaddrinfo[3], and man:getnameinfo[3] with NI_WITHSCOPEID. The "
+"implementation currently assumes 1-to-1 relationship between a link and an "
+"interface, which is stronger than what specs say."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:239
+#, no-wrap
+msgid "Plug and Play"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:245
+msgid ""
+"Most of the IPv6 stateless address autoconfiguration is implemented in the "
+"kernel. Neighbor Discovery functions are implemented in the kernel as a "
+"whole. Router Advertisement (RA) input for hosts is implemented in the "
+"kernel. Router Solicitation (RS) output for endhosts, RS input for routers, "
+"and RA output for routers are implemented in the userland."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:246
+#, no-wrap
+msgid "Assignment of link-local, and special addresses"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:251
+msgid ""
+"IPv6 link-local address is generated from IEEE802 address (Ethernet MAC "
+"address). Each of interface is assigned an IPv6 link-local address "
+"automatically, when the interface becomes up (IFF_UP). Also, direct route "
+"for the link-local address is added to routing table."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:253
+msgid "Here is an output of netstat command:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:260
+#, no-wrap
+msgid ""
+"Internet6:\n"
+"Destination Gateway Flags Netif Expire\n"
+"fe80:1::%ed0/64 link#1 UC ed0\n"
+"fe80:2::%ep0/64 link#2 UC ep0\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:265
+msgid ""
+"Interfaces that has no IEEE802 address (pseudo interfaces like tunnel "
+"interfaces, or ppp interfaces) will borrow IEEE802 address from other "
+"interfaces, such as Ethernet interfaces, whenever possible. If there is no "
+"IEEE802 hardware attached, a last resort pseudo-random value, MD5(hostname), "
+"will be used as source of link-local address. If it is not suitable for "
+"your usage, you will need to configure the link-local address manually."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:268
+msgid ""
+"If an interface is not capable of handling IPv6 (such as lack of multicast "
+"support), link-local address will not be assigned to that interface. See "
+"section 2 for details."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:272
+msgid ""
+"Each interface joins the solicited multicast address and the link-local all-"
+"nodes multicast addresses (e.g., fe80::1:ff01:6317 and ff02::1, "
+"respectively, on the link the interface is attached). In addition to a link-"
+"local address, the loopback address (::1) will be assigned to the loopback "
+"interface. Also, ::1/128 and ff01::/32 are automatically added to routing "
+"table, and loopback interface joins node-local multicast group ff01::1."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:273
+#, no-wrap
+msgid "Stateless address autoconfiguration on Hosts"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:277
+msgid ""
+"In IPv6 specification, nodes are separated into two categories: _routers_ "
+"and _hosts_. Routers forward packets addressed to others, hosts does not "
+"forward the packets. net.inet6.ip6.forwarding defines whether this node is "
+"router or host (router if it is 1, host if it is 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:286
+msgid ""
+"When a host hears Router Advertisement from the router, a host may "
+"autoconfigure itself by stateless address autoconfiguration. This behavior "
+"can be controlled by net.inet6.ip6.accept_rtadv (host autoconfigures itself "
+"if it is set to 1). By autoconfiguration, network address prefix for the "
+"receiving interface (usually global address prefix) is added. Default route "
+"is also configured. Routers periodically generate Router Advertisement "
+"packets. To request an adjacent router to generate RA packet, a host can "
+"transmit Router Solicitation. To generate a RS packet at any time, use the "
+"_rtsol_ command. man:rtsold[8] daemon is also available. man:rtsold[8] "
+"generates Router Solicitation whenever necessary, and it works great for "
+"nomadic usage (notebooks/laptops). If one wishes to ignore Router "
+"Advertisements, use sysctl to set net.inet6.ip6.accept_rtadv to 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:288
+msgid ""
+"To generate Router Advertisement from a router, use the man:rtadvd[8] daemon."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:290
+msgid ""
+"Note that, IPv6 specification assumes the following items, and nonconforming "
+"cases are left unspecified:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:292
+msgid "Only hosts will listen to router advertisements"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:293
+msgid "Hosts have single network interface (except loopback)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:296
+msgid ""
+"Therefore, this is unwise to enable net.inet6.ip6.accept_rtadv on routers, "
+"or multi-interface host. A misconfigured node can behave strange "
+"(nonconforming configuration allowed for those who would like to do some "
+"experiments)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:298
+msgid "To summarize the sysctl knob:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:312
+#, no-wrap
+msgid ""
+"\taccept_rtadv\tforwarding\trole of the node\n"
+"\t---\t\t---\t\t---\n"
+"\t0\t\t0\t\thost (to be manually configured)\n"
+"\t0\t\t1\t\trouter\n"
+"\t1\t\t0\t\tautoconfigured host\n"
+"\t\t\t\t\t(spec assumes that host has single\n"
+"\t\t\t\t\tinterface only, autoconfigured host\n"
+"\t\t\t\t\twith multiple interface is\n"
+"\t\t\t\t\tout-of-scope)\n"
+"\t1\t\t1\t\tinvalid, or experimental\n"
+"\t\t\t\t\t(out-of-scope of spec)\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:317
+msgid ""
+"RFC2462 has validation rule against incoming RA prefix information option, "
+"in 5.5.3 (e). This is to protect hosts from malicious (or misconfigured) "
+"routers that advertise very short prefix lifetime. There was an update from "
+"Jim Bound to ipngwg mailing list (look for \"(ipng 6712)\" in the archive) "
+"and it is implemented Jim's update."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:319
+msgid ""
+"See crossref:ipv6[neighbor-discovery,23.5.1.2] in the document for "
+"relationship between DAD and autoconfiguration."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:321
+#, no-wrap
+msgid "Generic Tunnel Interface"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:325
+msgid ""
+"GIF (Generic InterFace) is a pseudo interface for configured tunnel. "
+"Details are described in man:gif[4]. Currently"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:327
+msgid "v6 in v6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:328
+msgid "v6 in v4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:329
+msgid "v4 in v6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:330
+msgid "v4 in v4"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:335
+msgid ""
+"are available. Use man:gifconfig[8] to assign physical (outer) source and "
+"destination address to gif interfaces. Configuration that uses same address "
+"family for inner and outer IP header (v4 in v4, or v6 in v6) is dangerous. "
+"It is very easy to configure interfaces and routing tables to perform "
+"infinite level of tunneling. _Please be warned_."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:338
+msgid ""
+"gif can be configured to be ECN-friendly. See crossref:ipv6[ipsec-"
+"ecn,23.5.4.5] for ECN-friendliness of tunnels, and man:gif[4] for how to "
+"configure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:341
+msgid ""
+"If you would like to configure an IPv4-in-IPv6 tunnel with gif interface, "
+"read man:gif[4] carefully. You will need to remove IPv6 link-local address "
+"automatically assigned to the gif interface."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:343
+#, no-wrap
+msgid "Source Address Selection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:347
+msgid ""
+"Current source selection rule is scope oriented (there are some exceptions - "
+"see below). For a given destination, a source IPv6 address is selected by "
+"the following rule:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:349
+msgid ""
+"If the source address is explicitly specified by the user (e.g., via the "
+"advanced API), the specified address is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:350
+msgid ""
+"If there is an address assigned to the outgoing interface (which is usually "
+"determined by looking up the routing table) that has the same scope as the "
+"destination address, the address is used."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:352
+msgid "This is the most typical case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:353
+msgid ""
+"If there is no address that satisfies the above condition, choose a global "
+"address assigned to one of the interfaces on the sending node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:354
+msgid ""
+"If there is no address that satisfies the above condition, and destination "
+"address is site local scope, choose a site local address assigned to one of "
+"the interfaces on the sending node."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:355
+msgid ""
+"If there is no address that satisfies the above condition, choose the "
+"address associated with the routing table entry for the destination. This is "
+"the last resort, which may cause scope violation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:361
+msgid ""
+"For instance, ::1 is selected for ff01::1, fe80:1::200:f8ff:fe01:6317 for "
+"fe80:1::2a0:24ff:feab:839b (note that embedded interface index - described "
+"in crossref:ipv6[ipv6-scope-index,23.5.1.3] - helps us choose the right "
+"source address. Those embedded indices will not be on the wire). If the "
+"outgoing interface has multiple address for the scope, a source is selected "
+"longest match basis (rule 3). Suppose 2001:0DB8:808:1:200:f8ff:fe01:6317 "
+"and 2001:0DB8:9:124:200:f8ff:fe01:6317 are given to the outgoing interface. "
+"2001:0DB8:808:1:200:f8ff:fe01:6317 is chosen as the source for the "
+"destination 2001:0DB8:800::1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:368
+msgid ""
+"Note that the above rule is not documented in the IPv6 spec. It is "
+"considered \"up to implementation\" item. There are some cases where we do "
+"not use the above rule. One example is connected TCP session, and we use "
+"the address kept in tcb as the source. Another example is source address "
+"for Neighbor Advertisement. Under the spec (RFC2461 7.2.2) NA's source "
+"should be the target address of the corresponding NS's target. In this case "
+"we follow the spec rather than the above longest-match rule."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:374
+msgid ""
+"For new connections (when rule 1 does not apply), deprecated addresses "
+"(addresses with preferred lifetime = 0) will not be chosen as source address "
+"if other choices are available. If no other choices are available, "
+"deprecated address will be used as a last resort. If there are multiple "
+"choice of deprecated addresses, the above scope rule will be used to choose "
+"from those deprecated addresses. If you would like to prohibit the use of "
+"deprecated address for some reason, configure net.inet6.ip6.use_deprecated "
+"to 0. The issue related to deprecated address is described in RFC2462 5.5.4 "
+"(NOTE: there is some debate underway in IETF ipngwg on how to use "
+"\"deprecated\" address)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:376
+#, no-wrap
+msgid "Jumbo Payload"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:380
+msgid ""
+"The Jumbo Payload hop-by-hop option is implemented and can be used to send "
+"IPv6 packets with payloads longer than 65,535 octets. But currently no "
+"physical interface whose MTU is more than 65,535 is supported, so such "
+"payloads can be seen only on the loopback interface (i.e., lo0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:382
+msgid ""
+"If you want to try jumbo payloads, you first have to reconfigure the kernel "
+"so that the MTU of the loopback interface is more than 65,535 bytes; add the "
+"following to the kernel configuration file:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:384
+msgid "`options \"LARGE_LOMTU\" #To test jumbo payload`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:386
+msgid "and recompile the new kernel."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:390
+msgid ""
+"Then you can test jumbo payloads by the man:ping[8] command with -6, -b and "
+"-s options. The -b option must be specified to enlarge the size of the "
+"socket buffer and the -s option specifies the length of the packet, which "
+"should be more than 65,535. For example, type as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:394
+#, no-wrap
+msgid "% ping -6 -b 70000 -s 68000 ::1\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:399
+msgid ""
+"The IPv6 specification requires that the Jumbo Payload option must not be "
+"used in a packet that carries a fragment header. If this condition is "
+"broken, an ICMPv6 Parameter Problem message must be sent to the sender. "
+"specification is followed, but you cannot usually see an ICMPv6 error caused "
+"by this requirement."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:403
+msgid ""
+"When an IPv6 packet is received, the frame length is checked and compared to "
+"the length specified in the payload length field of the IPv6 header or in "
+"the value of the Jumbo Payload option, if any. If the former is shorter "
+"than the latter, the packet is discarded and statistics are incremented. "
+"You can see the statistics as output of man:netstat[8] command with `-s -p "
+"ip6' option:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:410
+#, no-wrap
+msgid ""
+"% netstat -s -p ip6\n"
+"\t ip6:\n"
+"\t\t(snip)\n"
+"\t\t1 with data size < data length\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:414
+msgid ""
+"So, kernel does not send an ICMPv6 error unless the erroneous packet is an "
+"actual Jumbo Payload, that is, its packet size is more than 65,535 bytes. "
+"As described above, currently no physical interface with such a huge MTU is "
+"supported, so it rarely returns an ICMPv6 error."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:417
+msgid ""
+"TCP/UDP over jumbogram is not supported at this moment. This is because we "
+"have no medium (other than loopback) to test this. Contact us if you need "
+"this."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:420
+msgid ""
+"IPsec does not work on jumbograms. This is due to some specification twists "
+"in supporting AH with jumbograms (AH header size influences payload length, "
+"and this makes it real hard to authenticate inbound packet with jumbo "
+"payload option as well as AH)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:424
+msgid ""
+"There are fundamental issues in *BSD support for jumbograms. We would like "
+"to address those, but we need more time to finalize these. To name a few:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:428
+msgid ""
+"mbuf pkthdr.len field is typed as \"int\" in 4.4BSD, so it will not hold "
+"jumbogram with len > 2G on 32bit architecture CPUs. If we would like to "
+"support jumbogram properly, the field must be expanded to hold 4G + IPv6 "
+"header + link-layer header. Therefore, it must be expanded to at least "
+"int64_t (u_int32_t is NOT enough)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:430
+msgid ""
+"We mistakingly use \"int\" to hold packet length in many places. We need to "
+"convert them into larger integral type. It needs a great care, as we may "
+"experience overflow during packet length computation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:431
+msgid ""
+"We mistakingly check for ip6_plen field of IPv6 header for packet payload "
+"length in various places. We should be checking mbuf pkthdr.len instead. "
+"ip6_input() will perform sanity check on jumbo payload option on input, and "
+"we can safely use mbuf pkthdr.len afterwards."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:432
+msgid "TCP code needs a careful update in bunch of places, of course."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:433
+#, no-wrap
+msgid "Loop Prevention in Header Processing"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:444
+msgid ""
+"IPv6 specification allows arbitrary number of extension headers to be placed "
+"onto packets. If we implement IPv6 packet processing code in the way BSD "
+"IPv4 code is implemented, kernel stack may overflow due to long function "
+"call chain. sys/netinet6 code is carefully designed to avoid kernel stack "
+"overflow, so sys/netinet6 code defines its own protocol switch structure, as "
+"\"struct ip6protosw\" (see [.filename]#netinet6/ip6protosw.h#). There is no "
+"such update to IPv4 part (sys/netinet) for compatibility, but small change "
+"is added to its pr_input() prototype. So \"struct ipprotosw\" is also "
+"defined. As a result, if you receive IPsec-over-IPv4 packet with massive "
+"number of IPsec headers, kernel stack may blow up. IPsec-over-IPv6 is "
+"okay. (Of-course, for those all IPsec headers to be processed, each such "
+"IPsec header must pass each IPsec check. So an anonymous attacker will not "
+"be able to do such an attack.)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:446
+#, no-wrap
+msgid "ICMPv6"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:450
+msgid ""
+"After RFC2463 was published, IETF ipngwg has decided to disallow ICMPv6 "
+"error packet against ICMPv6 redirect, to prevent ICMPv6 storm on a network "
+"medium. This is already implemented into the kernel."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:451
+#, no-wrap
+msgid "Applications"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:454
+msgid ""
+"For userland programming, we support IPv6 socket API as specified in "
+"RFC2553, RFC2292 and upcoming Internet drafts."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:459
+msgid ""
+"TCP/UDP over IPv6 is available and quite stable. You can enjoy "
+"man:telnet[1], man:ftp[1], man:rlogin[1], man:rsh[1], man:ssh[1], etc. "
+"These applications are protocol independent. That is, they automatically "
+"chooses IPv4 or IPv6 according to DNS."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:460
+#, no-wrap
+msgid "Kernel Internals"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:463
+msgid ""
+"While ip_forward() calls ip_output(), ip6_forward() directly calls "
+"if_output() since routers must not divide IPv6 packets into fragments."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:467
+msgid ""
+"ICMPv6 should contain the original packet as long as possible up to 1280. "
+"UDP6/IP6 port unreach, for instance, should contain all extension headers "
+"and the *unchanged* UDP6 and IP6 headers. So, all IP6 functions except TCP "
+"never convert network byte order into host byte order, to save the original "
+"packet."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:471
+msgid ""
+"tcp_input(), udp6_input() and icmp6_input() can not assume that IP6 header "
+"is preceding the transport headers due to extension headers. So, "
+"in6_cksum() was implemented to handle packets whose IP6 header and transport "
+"header is not continuous. TCP/IP6 nor UDP6/IP6 header structures do not "
+"exist for checksum calculation."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:474
+msgid ""
+"To process IP6 header, extension headers and transport headers easily, "
+"network drivers are now required to store packets in one internal mbuf or "
+"one or more external mbufs. A typical old driver prepares two internal "
+"mbufs for 96 - 204 bytes data, however, now such packet data is stored in "
+"one external mbuf."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:478
+msgid ""
+"`netstat -s -p ip6` tells you whether or not your driver conforms such "
+"requirement. In the following example, \"cce0\" violates the requirement. "
+"(For more information, refer to Section 2.)"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:488
+#, no-wrap
+msgid ""
+"Mbuf statistics:\n"
+" 317 one mbuf\n"
+" two or more mbuf::\n"
+" lo0 = 8\n"
+"\t\t\tcce0 = 10\n"
+" 3282 one ext mbuf\n"
+" 0 two or more ext mbuf\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:493
+msgid ""
+"Each input function calls IP6_EXTHDR_CHECK in the beginning to check if the "
+"region between IP6 and its header is continuous. IP6_EXTHDR_CHECK calls "
+"m_pullup() only if the mbuf has M_LOOP flag, that is, the packet comes from "
+"the loopback interface. m_pullup() is never called for packets coming from "
+"physical network interfaces."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:495
+msgid "Both IP and IP6 reassemble functions never call m_pullup()."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:497
+#, no-wrap
+msgid "IPv4 Mapped Address and IPv6 Wildcard Socket"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:501
+msgid ""
+"RFC2553 describes IPv4 mapped address (3.7) and special behavior of IPv6 "
+"wildcard bind socket (3.8). The spec allows you to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:503
+msgid "Accept IPv4 connections by AF_INET6 wildcard bind socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:504
+msgid ""
+"Transmit IPv4 packet over AF_INET6 socket by using special form of the "
+"address like ::ffff:10.1.1.1."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:507
+msgid ""
+"but the spec itself is very complicated and does not specify how the socket "
+"layer should behave. Here we call the former one \"listening side\" and the "
+"latter one \"initiating side\", for reference purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:509
+msgid ""
+"You can perform wildcard bind on both of the address families, on the same "
+"port."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:511
+msgid "The following table show the behavior of FreeBSD 4.x."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:520
+#, no-wrap
+msgid ""
+"listening side initiating side\n"
+" (AF_INET6 wildcard (connection to ::ffff:10.1.1.1)\n"
+" socket gets IPv4 conn.)\n"
+" --- ---\n"
+"FreeBSD 4.x configurable supported\n"
+" default: enabled\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:523
+msgid ""
+"The following sections will give you more details, and how you can configure "
+"the behavior."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:525
+msgid "Comments on listening side:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:532
+msgid ""
+"It looks that RFC2553 talks too little on wildcard bind issue, especially on "
+"the port space issue, failure mode and relationship between AF_INET/INET6 "
+"wildcard bind. There can be several separate interpretation for this RFC "
+"which conform to it but behaves differently. So, to implement portable "
+"application you should assume nothing about the behavior in the kernel. "
+"Using man:getaddrinfo[3] is the safest way. Port number space and wildcard "
+"bind issues were discussed in detail on ipv6imp mailing list, in mid March "
+"1999 and it looks that there is no concrete consensus (means, up to "
+"implementers). You may want to check the mailing list archives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:534
+msgid ""
+"If a server application would like to accept IPv4 and IPv6 connections, "
+"there will be two alternatives."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:539
+msgid ""
+"One is using AF_INET and AF_INET6 socket (you will need two sockets). Use "
+"man:getaddrinfo[3] with AI_PASSIVE into ai_flags, and man:socket[2] and "
+"man:bind[2] to all the addresses returned. By opening multiple sockets, you "
+"can accept connections onto the socket with proper address family. IPv4 "
+"connections will be accepted by AF_INET socket, and IPv6 connections will be "
+"accepted by AF_INET6 socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:545
+msgid ""
+"Another way is using one AF_INET6 wildcard bind socket. Use "
+"man:getaddrinfo[3] with AI_PASSIVE into ai_flags and with AF_INET6 into "
+"ai_family, and set the 1st argument hostname to NULL. And man:socket[2] and "
+"man:bind[2] to the address returned. (should be IPv6 unspecified addr). "
+"You can accept either of IPv4 and IPv6 packet via this one socket."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:549
+msgid ""
+"To support only IPv6 traffic on AF_INET6 wildcard binded socket portably, "
+"always check the peer address when a connection is made toward AF_INET6 "
+"listening socket. If the address is IPv4 mapped address, you may want to "
+"reject the connection. You can check the condition by using "
+"IN6_IS_ADDR_V4MAPPED() macro."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:551
+msgid ""
+"To resolve this issue more easily, there is system dependent "
+"man:setsockopt[2] option, IPV6_BINDV6ONLY, used like below."
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:555
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:602
+#, no-wrap
+msgid "\tint on;\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:558
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:605
+#, no-wrap
+msgid ""
+"\tsetsockopt(s, IPPROTO_IPV6, IPV6_BINDV6ONLY,\n"
+"\t\t (char *)&on, sizeof (on)) < 0));\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:561
+msgid "When this call succeed, then this socket only receive IPv6 packets."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:563
+msgid "Comments on initiating side:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:565
+msgid ""
+"Advise to application implementers: to implement a portable IPv6 application "
+"(which works on multiple IPv6 kernels), we believe that the following is the "
+"key to the success:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:567
+msgid "NEVER hardcode AF_INET nor AF_INET6."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:568
+msgid ""
+"Use man:getaddrinfo[3] and man:getnameinfo[3] throughout the system. Never "
+"use gethostby*(), getaddrby*(), inet_*() or getipnodeby*(). (To update "
+"existing applications to be IPv6 aware easily, sometime getipnodeby*() will "
+"be useful. But if possible, try to rewrite the code to use "
+"man:getaddrinfo[3] and man:getnameinfo[3].)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:569
+msgid ""
+"If you would like to connect to destination, use man:getaddrinfo[3] and try "
+"all the destination returned, like man:telnet[1] does."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:570
+msgid ""
+"Some of the IPv6 stack is shipped with buggy man:getaddrinfo[3]. Ship a "
+"minimal working version with your application and use that as last resort."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:576
+msgid ""
+"If you would like to use AF_INET6 socket for both IPv4 and IPv6 outgoing "
+"connection, you will need to use man:getipnodebyname[3]. When you would "
+"like to update your existing application to be IPv6 aware with minimal "
+"effort, this approach might be chosen. But please note that it is a "
+"temporal solution, because man:getipnodebyname[3] itself is not recommended "
+"as it does not handle scoped IPv6 addresses at all. For IPv6 name "
+"resolution, man:getaddrinfo[3] is the preferred API. So you should rewrite "
+"your application to use man:getaddrinfo[3], when you get the time to do it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:580
+msgid ""
+"When writing applications that make outgoing connections, story goes much "
+"simpler if you treat AF_INET and AF_INET6 as totally separate address "
+"family. {set,get}sockopt issue goes simpler, DNS issue will be made "
+"simpler. We do not recommend you to rely upon IPv4 mapped address."
+msgstr ""
+
+#. type: Title =====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:581
+#, no-wrap
+msgid "unified tcp and inpcb code"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:585
+msgid ""
+"FreeBSD 4.x uses shared tcp code between IPv4 and IPv6 (from sys/netinet/"
+"tcp*) and separate udp4/6 code. It uses unified inpcb structure."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:588
+msgid ""
+"The platform can be configured to support IPv4 mapped address. Kernel "
+"configuration is summarized as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:590
+msgid ""
+"By default, AF_INET6 socket will grab IPv4 connections in certain condition, "
+"and can initiate connection to IPv4 destination embedded in IPv4 mapped IPv6 "
+"address."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:591
+msgid "You can disable it on entire system with sysctl like below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:593
+msgid "`sysctl net.inet6.ip6.mapped_addr=0`"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:595
+msgid "====== Listening Side"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:598
+msgid ""
+"Each socket can be configured to support special AF_INET6 wildcard bind "
+"(enabled by default). You can disable it on each socket basis with "
+"man:setsockopt[2] like below."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:608
+msgid ""
+"Wildcard AF_INET6 socket grabs IPv4 connection if and only if the following "
+"conditions are satisfied:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:610
+msgid "there is no AF_INET socket that matches the IPv4 connection"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:611
+msgid ""
+"the AF_INET6 socket is configured to accept IPv4 traffic, i.e., "
+"getsockopt(IPV6_BINDV6ONLY) returns 0."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:613
+msgid "There is no problem with open/close ordering."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:615
+msgid "====== Initiating Side"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:617
+msgid ""
+"FreeBSD 4.x supports outgoing connection to IPv4 mapped address "
+"(::ffff:10.1.1.1), if the node is configured to support IPv4 mapped address."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:618
+#, no-wrap
+msgid "sockaddr_storage"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:624
+msgid ""
+"When RFC2553 was about to be finalized, there was discussion on how struct "
+"sockaddr_storage members are named. One proposal is to prepend \"__\" to "
+"the members (like \"__ss_len\") as they should not be touched. The other "
+"proposal was not to prepend it (like \"ss_len\") as we need to touch those "
+"members directly. There was no clear consensus on it."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:626
+msgid "As a result, RFC2553 defines struct sockaddr_storage as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:634
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage {\n"
+"\t\tu_char\t__ss_len;\t/* address length */\n"
+"\t\tu_char\t__ss_family;\t/* address family */\n"
+"\t\t/* and bunch of padding */\n"
+"\t};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:637
+msgid "On the contrary, XNET draft defines as follows:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:645
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage {\n"
+"\t\tu_char\tss_len;\t\t/* address length */\n"
+"\t\tu_char\tss_family;\t/* address family */\n"
+"\t\t/* and bunch of padding */\n"
+"\t};\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:648
+msgid ""
+"In December 1999, it was agreed that RFC2553bis should pick the latter "
+"(XNET) definition."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:650
+msgid ""
+"Current implementation conforms to XNET definition, based on RFC2553bis "
+"discussion."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:653
+msgid ""
+"If you look at multiple IPv6 implementations, you will be able to see both "
+"definitions. As an userland programmer, the most portable way of dealing "
+"with it is to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:655
+msgid ""
+"ensure ss_family and/or ss_len are available on the platform, by using GNU "
+"autoconf,"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:656
+msgid ""
+"have -Dss_family=__ss_family to unify all occurrences (including header "
+"file) into __ss_family, or"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:657
+msgid "never touch __ss_family. cast to sockaddr * and use sa_family like:"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:662
+#, no-wrap
+msgid ""
+"\tstruct sockaddr_storage ss;\n"
+"\tfamily = ((struct sockaddr *)&ss)->sa_family\n"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:664
+#, no-wrap
+msgid "Network Drivers"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:667
+msgid ""
+"Now following two items are required to be supported by standard drivers:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:669
+msgid ""
+"mbuf clustering requirement. In this stable release, we changed MINCLSIZE "
+"into MHLEN+1 for all the operating systems in order to make all the drivers "
+"behave as we expect."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:670
+msgid ""
+"multicast. If man:ifmcstat[8] yields no multicast group for a interface, "
+"that interface has to be patched."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:673
+msgid ""
+"If any of the drivers do not support the requirements, then the drivers "
+"cannot be used for IPv6 and/or IPsec communication. If you find any problem "
+"with your card using IPv6/IPsec, then, please report it to the {freebsd-"
+"bugs}."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:676
+msgid ""
+"(NOTE: In the past we required all PCMCIA drivers to have a call to "
+"in6_ifattach(). We have no such requirement any more)"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:677
+#, no-wrap
+msgid "Translator"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:680
+msgid "We categorize IPv4/IPv6 translator into 4 types:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:682
+msgid ""
+"_Translator A_ --- It is used in the early stage of transition to make it "
+"possible to establish a connection from an IPv6 host in an IPv6 island to an "
+"IPv4 host in the IPv4 ocean."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:683
+msgid ""
+"_Translator B_ --- It is used in the early stage of transition to make it "
+"possible to establish a connection from an IPv4 host in the IPv4 ocean to an "
+"IPv6 host in an IPv6 island."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:684
+msgid ""
+"_Translator C_ --- It is used in the late stage of transition to make it "
+"possible to establish a connection from an IPv4 host in an IPv4 island to an "
+"IPv6 host in the IPv6 ocean."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:685
+msgid ""
+"_Translator D_ --- It is used in the late stage of transition to make it "
+"possible to establish a connection from an IPv6 host in the IPv6 ocean to an "
+"IPv4 host in an IPv4 island."
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:687
+#, no-wrap
+msgid "IPsec"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:690
+msgid "IPsec is mainly organized by three components."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:692
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:695
+#, no-wrap
+msgid "Policy Management"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:693
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:705
+#, no-wrap
+msgid "Key Management"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:694
+msgid "AH and ESP handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:702
+msgid ""
+"The kernel implements experimental policy management code. There are two "
+"way to manage security policy. One is to configure per-socket policy using "
+"man:setsockopt[2]. In this cases, policy configuration is described in "
+"man:ipsec_set_policy[3]. The other is to configure kernel packet filter-"
+"based policy using PF_KEY interface, via man:setkey[8]."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:704
+msgid ""
+"The policy entry is not re-ordered with its indexes, so the order of entry "
+"when you add is very significant."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:709
+msgid ""
+"The key management code implemented in this kit (sys/netkey) is a home-brew "
+"PFKEY v2 implementation. This conforms to RFC2367."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:713
+msgid ""
+"The home-brew IKE daemon, \"racoon\" is included in the kit (kame/kame/"
+"racoon). Basically you will need to run racoon as daemon, then set up a "
+"policy to require keys (like `ping -P 'out ipsec esp/transport//use'`). The "
+"kernel will contact racoon daemon as necessary to exchange keys."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:714
+#, no-wrap
+msgid "AH and ESP Handling"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:722
+msgid ""
+"IPsec module is implemented as \"hooks\" to the standard IPv4/IPv6 "
+"processing. When sending a packet, ip{,6}_output() checks if ESP/AH "
+"processing is required by checking if a matching SPD (Security Policy "
+"Database) is found. If ESP/AH is needed, {esp,ah}{4,6}_output() will be "
+"called and mbuf will be updated accordingly. When a packet is received, "
+"{esp,ah}4_input() will be called based on protocol number, i.e., "
+"(*inetsw[proto])(). {esp,ah}4_input() will decrypt/check authenticity of "
+"the packet, and strips off daisy-chained header and padding for ESP/AH. It "
+"is safe to strip off the ESP/AH header on packet reception, since we will "
+"never use the received packet in \"as is\" form."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:725
+msgid ""
+"By using ESP/AH, TCP4/6 effective data segment size will be affected by "
+"extra daisy-chained headers inserted by ESP/AH. Our code takes care of the "
+"case."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:729
+msgid ""
+"Basic crypto functions can be found in directory \"sys/crypto\". ESP/AH "
+"transform are listed in {esp,ah}_core.c with wrapper functions. If you wish "
+"to add some algorithm, add wrapper function in {esp,ah}_core.c, and add your "
+"crypto algorithm code into sys/crypto."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:731
+msgid ""
+"Tunnel mode is partially supported in this release, with the following "
+"restrictions:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:733
+msgid ""
+"IPsec tunnel is not combined with GIF generic tunneling interface. It needs "
+"a great care because we may create an infinite loop between ip_output() and "
+"tunnelifp->if_output(). Opinion varies if it is better to unify them, or not."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:734
+msgid ""
+"MTU and Don't Fragment bit (IPv4) considerations need more checking, but "
+"basically works fine."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:735
+msgid ""
+"Authentication model for AH tunnel must be revisited. We will need to "
+"improve the policy management engine, eventually."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:736
+#, no-wrap
+msgid "Conformance to RFCs and IDs"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:739
+msgid ""
+"The IPsec code in the kernel conforms (or, tries to conform) to the "
+"following standards:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:741
+msgid "\"old IPsec\" specification documented in [.filename]#rfc182[5-9].txt#"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:744
+msgid ""
+"\"new IPsec\" specification documented in [.filename]#rfc240[1-6].txt#, "
+"[.filename]#rfc241[01].txt#, [.filename]#rfc2451.txt# and [.filename]#draft-"
+"mcdonald-simple-ipsec-api-01.txt# (draft expired, but you can take from "
+"link:ftp://ftp.kame.net/pub/internet-drafts/[ ftp://ftp.kame.net/pub/"
+"internet-drafts/]). (NOTE: IKE specifications, [.filename]#rfc241[7-9].txt# "
+"are implemented in userland, as \"racoon\" IKE daemon)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:746
+msgid "Currently supported algorithms are:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:748
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:785
+msgid "old IPsec AH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:750
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:763
+msgid "null crypto checksum (no document, just for debugging)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:751
+msgid "keyed MD5 with 128bit crypto checksum ([.filename]#rfc1828.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:752
+msgid "keyed SHA1 with 128bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:753
+msgid "HMAC MD5 with 128bit crypto checksum ([.filename]#rfc2085.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:754
+msgid "HMAC SHA1 with 128bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:756
+msgid "old IPsec ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:758
+msgid "null encryption (no document, similar to [.filename]#rfc2410.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:759
+msgid "DES-CBC mode ([.filename]#rfc1829.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:761
+msgid "new IPsec AH"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:764
+msgid "keyed MD5 with 96bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:765
+msgid "keyed SHA1 with 96bit crypto checksum (no document)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:766
+msgid "HMAC MD5 with 96bit crypto checksum ([.filename]#rfc2403.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:767
+msgid "HMAC SHA1 with 96bit crypto checksum ([.filename]#rfc2404.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:769
+msgid "new IPsec ESP"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:771
+msgid "null encryption ([.filename]#rfc2410.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:772
+msgid ""
+"DES-CBC with derived IV ([.filename]#draft-ietf-ipsec-ciph-des-"
+"derived-01.txt#, draft expired)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:773
+msgid "DES-CBC with explicit IV ([.filename]#rfc2405.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:774
+msgid "3DES-CBC with explicit IV ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:775
+msgid "BLOWFISH CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:776
+msgid "CAST128 CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:777
+msgid "RC5 CBC ([.filename]#rfc2451.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:778
+msgid "each of the above can be combined with:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:780
+msgid "ESP authentication with HMAC-MD5(96bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:781
+msgid "ESP authentication with HMAC-SHA1(96bit)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:783
+msgid "The following algorithms are NOT supported:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:787
+msgid ""
+"HMAC MD5 with 128bit crypto checksum + 64bit replay prevention "
+"([.filename]#rfc2085.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:788
+msgid ""
+"keyed SHA1 with 160bit crypto checksum + 32bit padding "
+"([.filename]#rfc1852.txt#)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:791
+msgid ""
+"IPsec (in kernel) and IKE (in userland as \"racoon\") has been tested at "
+"several interoperability test events, and it is known to interoperate with "
+"many other implementations well. Also, current IPsec implementation as "
+"quite wide coverage for IPsec crypto algorithms documented in RFC (we cover "
+"algorithms without intellectual property issues only)."
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:793
+#, no-wrap
+msgid "ECN Consideration on IPsec Tunnels"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:796
+msgid ""
+"ECN-friendly IPsec tunnel is supported as described in [.filename]#draft-"
+"ipsec-ecn-00.txt#."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:801
+msgid ""
+"Normal IPsec tunnel is described in RFC2401. On encapsulation, IPv4 TOS "
+"field (or, IPv6 traffic class field) will be copied from inner IP header to "
+"outer IP header. On decapsulation outer IP header will be simply dropped. "
+"The decapsulation rule is not compatible with ECN, since ECN bit on the "
+"outer IP TOS/traffic class field will be lost."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:804
+msgid ""
+"To make IPsec tunnel ECN-friendly, we should modify encapsulation and "
+"decapsulation procedure. This is described in http://www.aciri.org/floyd/"
+"papers/draft-ipsec-ecn-00.txt[ http://www.aciri.org/floyd/papers/draft-ipsec-"
+"ecn-00.txt], chapter 3."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:806
+msgid ""
+"IPsec tunnel implementation can give you three behaviors, by setting "
+"net.inet.ipsec.ecn (or net.inet6.ipsec6.ecn) to some value:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:808
+msgid "RFC2401: no consideration for ECN (sysctl value -1)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:809
+msgid "ECN forbidden (sysctl value 0)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:810
+msgid "ECN allowed (sysctl value 1)"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:812
+msgid ""
+"Note that the behavior is configurable in per-node manner, not per-SA manner "
+"(draft-ipsec-ecn-00 wants per-SA configuration, but it looks too much for "
+"me)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:814
+msgid ""
+"The behavior is summarized as follows (see source code for more detail):"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:821
+#, no-wrap
+msgid ""
+"encapsulate decapsulate\n"
+" --- ---\n"
+"RFC2401 copy all TOS bits drop TOS bits on outer\n"
+" from inner to outer. (use inner TOS bits as is)\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:825
+#, no-wrap
+msgid ""
+"ECN forbidden copy TOS bits except for ECN drop TOS bits on outer\n"
+" (masked with 0xfc) from inner (use inner TOS bits as is)\n"
+" to outer. set ECN bits to 0.\n"
+msgstr ""
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:830
+#, no-wrap
+msgid ""
+"ECN allowed copy TOS bits except for ECN use inner TOS bits with some\n"
+" CE (masked with 0xfe) from change. if outer ECN CE bit\n"
+" inner to outer. is 1, enable ECN CE bit on\n"
+" set ECN CE bit to 0. the inner.\n"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:833
+msgid "General strategy for configuration is as follows:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:835
+msgid ""
+"if both IPsec tunnel endpoint are capable of ECN-friendly behavior, you "
+"should better configure both end to \"ECN allowed\" (sysctl value 1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:836
+msgid ""
+"if the other end is very strict about TOS bit, use \"RFC2401\" (sysctl value "
+"-1)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:837
+msgid "in other cases, use \"ECN forbidden\" (sysctl value 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:839
+msgid "The default behavior is \"ECN forbidden\" (sysctl value 0)."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:841
+msgid "For more information, please refer to:"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:843
+msgid ""
+"http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt[ http://"
+"www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt], RFC2481 (Explicit "
+"Congestion Notification), src/sys/netinet6/{ah,esp}_input.c"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:845
+msgid ""
+"(Thanks goes to Kenjiro Cho mailto:kjc@csl.sony.co.jp[kjc@csl.sony.co.jp] "
+"for detailed analysis)"
+msgstr ""
+
+#. type: Title ====
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:846
+#, no-wrap
+msgid "Interoperability"
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:850
+msgid ""
+"Here are (some of) platforms that KAME code have tested IPsec/IKE "
+"interoperability in the past. Note that both ends may have modified their "
+"implementation, so use the following list just for reference purposes."
+msgstr ""
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:851
+msgid ""
+"Altiga, Ashley-laurent (vpcom.com), Data Fellows (F-Secure), Ericsson ACC, "
+"FreeS/WAN, HITACHI, IBM AIX(R), IIJ, Intel, Microsoft(R) Windows NT(R), NIST "
+"(linux IPsec + plutoplus), Netscreen, OpenBSD, RedCreek, Routerware, SSH, "
+"Secure Computing, Soliton, Toshiba, VPNet, Yamaha RT100i"
+msgstr ""