Release notes Solaris 2.5/2.5.1 IPv6 prototype 5.3 Sep 22, 1997 WELCOME! These notes provide configuration and specifics about the prototype release version 5.3 of IPv6. For general information and how to download the release see our web page. For more information about IPv6, see the IPv6 web page. What is in release 5.3? This patch contains support for EUI-64 interface identifier format. Release overview Kernel Protocol Code: Support for IPv6 has been added to the IP, TCP, UDP and ICMP layer code. These changes reside in the kernel modules: /kernel/drv/ip IP layer code /kernel/drv/tcp TCP layer code /kernel/drv/udp UDP layer code /kernel/drv/icmp ICMP and raw IP code Support for both IP protocols -- IPv4 and IPv6 -- is contained in all of the above modules. There are no separate modules for IPv6 Internet and Transport layer code. A minor change to the ARP module, used by IPv4, was made due to internal interface changes: /kernel/drv/arp ARP code One new kernel modules has been added (in release 2 there was a /kernel/drv/ndp module, this has since been deprecated): /kernel/drv/atun Tunneling driver This module is specific to IPv6. It is not used in IPv4. All of the TCP/IP modules are loaded automatically at boot time. System Utilities: IPv6 Remote Command Execution IPv6 system commands and utilities exist for rlogin, rsh, rcp, rdist, finger, getent, in.rlogind, in.rshd, and in.fingerd. As with previous releases IPV6 versions of the inetd, ifconfig, route, ftp, tftp, telnet, in.ftpd, in.tftpd, in.telnetd, snoop, sendmail, mconnect, named and ping commands are included as well. As with our previous prototype releases, these programs reside under a the new directory structure, "/usr/ipv6". There are several subdirectories: /usr/ipv6/notes Release information notes /usr/ipv6/bin IPv6 user programs (i.e., netstat) /usr/ipv6/sbin IPv6 system admin programs and daemons /usr/ipv6/etc Misc. config files /usr/ipv6/test IPv6 performance tests /usr/ipv6/lib IPv6 sendmail related files Note that the original versions of the user programs netstat, telnet, ftp, tftp, and ping remain in /usr/bin and /usr/sbin. These programs will continue to work, but they will speak only IPv4. The IPv6 versions in /usr/ipv6/bin and /usr/ipv6/sbin will speak both IPv4 and IPv6. NOTE: Please make sure that you include ipv6 entries in your name service database (either /etc/hosts or named database) for the host that this release will be installed on as well as any other testing hosts that you may do inter-connectivity with. In particular, sendmail does reverse name lookups, so it is imperative if you don't have the ipv6 database ready for named reverse lookups, that you add a ipv6 hostname entry in /etc/hosts. IPV6 Remote Command execution The rcmd client functions and its corresponding rshd server now work over IPv6. The IPv6 version of rcmd interface is rcmd6. A IPv6 rresvport is also provided as rresvport6. See the man page for rcmd or rcmd6 for more details. Note that rresvport6() will eventually become rresvport_af() as is documented in the Adv API internet-draft. The rlogin, rcp, rdist, and rsh commands with this release use the rcmd6 client function. Note: When performing an rlogin to a host supporting ipv6. The rlogin command will print a few strange characters before the "Password:" prompt. We couldn't locate this bug before the release went out so please ignore this. The basic functionality of rlogin works just fine and you won't have any problems. In fact, this release fixes a rlogin problem reported against the previous prototype release regarding multiple logins. IPv6 interfaces: IPv6 and IPv4 interfaces are able to coexist over the same physical network interface device. IPv4 interfaces are configured as they have always been. IPv6 interfaces are configured using the "plumb6" ifconfig subcommand. The convention #v6 is used to name IPv6 interfaces. This is the canonical IPv4 interface name with a "#v6" appended. NOTE: On machines with multiple interfaces it is currently necessary to add a token to link local addresses. This implies that a prefix of 10 instead of 80 should be used on link local addresses. Also the 64 bit token drafts have not been integrated into the prototype. For information on configuring IPv6 network interfaces consult the ifconfig and atun man pages included in the release. Neighbor Discovery and Autoconfiguration: This release supports router discovery, prefix discovery, and stateless address autoconfiguration protocols specified in the "Neighbor Discovery for IPv6" and "IPv6 Stateless Address Autoconfiguration" Internet Drafts. Consult the ifconfig man page and in.rdisc6 man page for information on using prefix discovery and stateless address autoconfiguration. Routed for IPv6: This release supports RIPng, and RIPng over tunnels as specified in RFC2080. System Libraries (IPv6 related changes): The IPv6 Socket Interface Extensions are based on Informational RFC 2133 (April 1997). See the postscript file "api-checklist.ps" that is contained with this release to see the specifics of the support for RFC 2133. Also see the section entitled "Name Service Lookup" that is contained in these release notes. Interface Library Location --------- ---------------- inet_pton() libnsl inet_ntop() libnsl gethostbyname2() libnsl (recommended over others) gethostbyname() libnsl (as always) gethostbyaddr() libsnl (as always) getaddrinfo() libsocket getnameinfo() libsocket freeaddrinfo() libsocket gai_strerror() libsocket freehostent() libsocket rcmd6 libsocket rresvport6 libsocket Location of corresponding interface prototypes are defined in RFC 2133. This release of Solaris IPv6 adheres to those locations. Calls to the socket interface functions (e.g., socket()) allow the AF_INET6 address family. Calls accepting sockaddr_in structures such as connect() now take sockaddr_in6 structures as well. The socket interface changes also required modification to sockmod, the loadable kernel module which supports the socket interface. The internet draft "draft-stevens-advanced-api-02.txt" is not supported in this release. This draft deals with advanced features of the socket API of which most depends on "ancillary data". Since "ancillary data" is not in Solaris 2.5.1 this prototype doesn't provide support for the features in the advanced api. NOTE: This release only provides the shared libraries and not the static libraries (i.e., libsocket.a). After installation of the release, libnsl.so.1 won't correspond to libnsl.a. Here libnsl.so.1 will be the IPv6 version while the libnsl.a will be unchanged and be the default system library. Address Testing Macros: A standardized suite of macros have been added to this release to test for special IPv6 addresses. The first seven macros return true if the address is of the specified type, or false otherwise. The last five test the scope of a multicast address and return true if the address is a multicast address of the specified scope or false if the address is either not a multicast address or not of the specified scope. #include int IN6_IS_ADDR_UNSPECIFIED (const struct in6_addr *); int IN6_IS_ADDR_LOOPBACK (const struct in6_addr *); int IN6_IS_ADDR_MULTICAST (const struct in6_addr *); int IN6_IS_ADDR_LINKLOCAL (const struct in6_addr *); int IN6_IS_ADDR_SITELOCAL (const struct in6_addr *); int IN6_IS_ADDR_V4MAPPED (const struct in6_addr *); int IN6_IS_ADDR_V4COMPAT (const struct in6_addr *); int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *); int IN6_IS_ADDR_MC_ORGLOCAL (const struct in6_addr *); int IN6_IS_ADDR_MC_GLOBAL (const struct in6_addr *); Header Files: A number of new macro and structure declarations have been added to system header files in order to implement the IPv6 socket interface extensions. The changed header files are: /usr/include/arpa/inet.h /usr/include/inet/mib2.h /usr/include/sys/sockio.h /usr/include/sys/socket.h /usr/include/net/if.h /usr/include/netinet/igmp_var.h /usr/include/netinet/in.h /usr/include/netinet/ip_icmp.h /usr/include/inet/ip_common.h /usr/include/netdb.h /usr/include/resolv.h IPV6 Unbundled Applications: The NCSA Mosaic browser and HTTPD server has been converted to work over the Solaris version of IPV6. You can find a Mosaic startup script and corresponding binary in: /usr/ipv6/bin/mosaic -- startup script (defines environment for you) /usr/ipv6/bin/Mosaic -- called on by startup script (Mosaic binary) The source base used for the ipv6 conversion of Mosaic is NCSA Mosaic Version 2.7b2. For general information on the Mosaic browser please see: http://wwww.ncsa.uiuc.edu/SDG/Software/XMosaic. This Release also installs an IPV6 version of the NCSA HTTPD server. The IPV6 HTTPD and corresponding configuration files and utilities are installed at: /etc/ipv6/httpd_ipv6 -- Server Root Directory /etc/ipv6/httpd_ipv6/httpd -- httpd binary (ipv6) /etc/ipv6/httpd_ipv6/htdoc -- Doc Root Directory The installation script will prompt you to configure your host with the ipv6 httpd daemon. The source base used for the ipv6 HTTPD is NCSA HTTPD V1.5. For general information on NCSA HTTPD please see: http://hoohoo.ncsa.uiuc.edu. IPV6 Functional and Performance tests This release provides you with two test suites: "ttcp" and "TCPTESTS". Both of these suites have been converted to execute over IPV6. You can find these IPV6 tests at: /usr/ipv6/tests -- binaries and documentation A man page exists in this directory describing the "ttcp" test suite (ttcp.1). A README file is also located here that details the TCPTEST suite. The ttcp test suite is based on public domain source code (available at sgi.com). Name Service Lookup: This Prototype Release again supports the DNS and /etc/hosts name service lookup. The Solaris switch has been modified to support IPv6 address lookups for either of these two name services. The standard setup procedures for performing /etc/hosts lookup's versus DNS are the same as they are for IPv4. The /etc/nsswitch.conf would need to be edited to include a line such as: hosts: dns files Special Important Note: gethostbyname2(AF_INET6...) works for dns and files. Using gethostbyname2(AF_INET6...) to lookup IPv6 addresses (even v4) in the NIS/NIS+ name services for this prototype will return NULL. Of course the older gethostbyname() works as always with NIS/NIS+. NIS/NIS+ support for IPv6 will be provided when Solaris IPv6 is released as a product but won't be released in any of our prototypes. Also note that all the v6 supported commands delivered with this prototype (e.g., telnet, ping, etc) use gethostbyname2(AF_INET6...). As such, it is important that the names of hosts that you are telnet'ing or ping'ing have their address (even v4) stored in the dns or /etc/hosts. Otherwise, if the names were only stored in NIS/NIS+ you would get "hostname not found" when invoking the new v6 commands (NULL is returned by NIS/NIS+). The gethostbyname2() interface is recommended for hostname-to-address translation. The DNS option RES_INET6 can only be set via the environment variable RES_OPTIONS (as specified in RFC 2133). This works no matter if you are looking up ipv6 addresses via DNS or /etc/hosts. The setting of this environment variable has an effect on gethostbyname() and gethostbyname2(). See RFC 2133 for details of this effect. Since gethostbyname2() is supported in libnsl and the socket interfaces are supported in libsocket, the compile line for your program would look like: cc -o myapp myapp.c -lsocket -lnsl nn Support regarding the setting of the resolver option RES_USE_INET6 - libnsl supports the setting of the resolver option RES_USE_INET6 via the environment variable RES_OPTIONS (i.e., setenv RES_OPTIONS inet6). - libnsl doesn't support the setting of the RES_USE_INET6 resolver option via the variable _res. RFC 2133 is specific to DNS. libnsl supports hostname-to-address translation to multiple name services (i.e., nis/nis+) through the solaris naming service switch. We are currently investigating a way to support the RES_USE_INET6 feature to all name services. If you want to set the RES_USE_INET6 resolver option via the variable _res, you can download BIND 4.9.4 (or BIND 4.9.5). You then link in the libresolv library that is part of BIND 4.9.{4,5} and you will by-pass the solaris switch and perform dns lookups directly. See URL: ftp://ftp.isc.org/isc/bind/src for downloading BIND 4.9.{4,5}. NOTE: If "nisplus" or "nis" are included in /etc/nsswitch.conf for the "hosts" database, a IPv6 (AF_INET6) lookup from a call to gethostbyname2()/getaddrinfo() will result in a NULL hostent struct being returned. Setting up databases for DNS: Support for the IPv6 address records (AAAA records) has been added to the DNS server program (named) and the DNS tool for querying the DNS server (nslookup). The source base used in adding IPv6 support to the DNS server and nslookup program is BIND 4.9.3 BETA 18. This code hasn't changed since our first prototype release. The only thing that is not supported with this version of bind relating to IPV6 is that of setting the RES_USE_INET6 resolver option via the variable _res. Only the setting of the RES_USE_INET6 option via the environment variable RES_OPTIONS is supported. As was noted above BIND 4.9.{4,5} does support the setting of RES_USE_INET6 via the variable _res. To add IPv6 (AAAA) address records to your databases, use the following record format: hostname IN AAAA ipv6_address The ascii representation of the ipv6_address can be one of two formats: - x:x:x:x:x:x:x:x (hexadecimal notation) - ::d.d.d.d (IPv4 compatible address) See the IETF RFC 1886 "DNS Extensions to support IP version 6" for more details on the "AAAA" record. Example use of "nslookup": # nslookup > set q=any or # nslookup > set q=AAAA The DNS server and "nslookup" program can be run on un-modified Solaris 2.5 systems. They are not dependent on the IPv6 support in the rest of the system. Thus, you can use this code to provide IPv6 DNS address service from a more stable system. Setting up databases for /etc/hosts: IPv6 hosts entries in the /etc/hosts database follow the same standards that Solaris allows for IPv4 only with IPv6 addresses. Example: 127.0.0.1 localhost 129.144.248.127 audeen loghost 129.144.1.45 ssi-master ::8190:3584 dunk 129.144.53.132 dunk ::129.144.248.127 audeen fec0:1::11 back1v6i ::ffff:129.144.248.127 atwood fec0:1:: net1922930-v6