 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			363 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			363 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: inet.3,v 1.1 2004/05/20 23:13:02 christos Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1983, 1990, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     @(#)inet.3	8.1 (Berkeley) 6/4/93
 | |
| .\"
 | |
| .Dd June 30, 2003
 | |
| .Dt INET 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm inet_addr ,
 | |
| .Nm inet_aton ,
 | |
| .Nm inet_lnaof ,
 | |
| .Nm inet_makeaddr ,
 | |
| .Nm inet_netof ,
 | |
| .Nm inet_network ,
 | |
| .Nm inet_ntoa ,
 | |
| .Nm inet_ntop ,
 | |
| .Nm inet_pton ,
 | |
| .Nm addr ,
 | |
| .Nm ntoa ,
 | |
| .Nm network
 | |
| .Nd Internet address manipulation routines
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In arpa/inet.h
 | |
| .Ft in_addr_t
 | |
| .Fn inet_addr "const char *cp"
 | |
| .Ft int
 | |
| .Fn inet_aton "const char *cp" "struct in_addr *addr"
 | |
| .Ft in_addr_t
 | |
| .Fn inet_lnaof "struct in_addr in"
 | |
| .Ft struct in_addr
 | |
| .Fn inet_makeaddr "in_addr_t net" "in_addr_t lna"
 | |
| .Ft in_addr_t
 | |
| .Fn inet_netof "struct in_addr in"
 | |
| .Ft in_addr_t
 | |
| .Fn inet_network "const char *cp"
 | |
| .Ft char *
 | |
| .Fn inet_ntoa "struct in_addr in"
 | |
| .Ft const char *
 | |
| .Fn inet_ntop "int af" "const void * restrict src" "char * restrict dst" "socklen_t size"
 | |
| .Ft int
 | |
| .Fn inet_pton "int af" "const char * restrict src" "void * restrict dst"
 | |
| .Sh DESCRIPTION
 | |
| The routines
 | |
| .Fn inet_aton ,
 | |
| .Fn inet_addr
 | |
| and
 | |
| .Fn inet_network
 | |
| interpret character strings representing
 | |
| numbers expressed in the Internet standard
 | |
| .Qq dotted quad
 | |
| notation.
 | |
| .Pp
 | |
| The
 | |
| .Fn inet_pton
 | |
| function converts a presentation format address (that is, printable form
 | |
| as held in a character string) to network format (usually a
 | |
| .Ft struct in_addr
 | |
| or some other internal binary representation, in network byte order).
 | |
| It returns 1 if the address was valid for the specified address family, or
 | |
| 0 if the address wasn't parsable in the specified address family, or -1
 | |
| if some system error occurred (in which case
 | |
| .Va errno
 | |
| will have been set).
 | |
| This function is presently valid for
 | |
| .Dv AF_INET
 | |
| and
 | |
| .Dv AF_INET6 .
 | |
| .Pp
 | |
| The
 | |
| .Fn inet_aton
 | |
| routine interprets the specified character string as an Internet address,
 | |
| placing the address into the structure provided.
 | |
| It returns 1 if the string was successfully interpreted,
 | |
| or 0 if the string is invalid.
 | |
| .Pp
 | |
| The
 | |
| .Fn inet_addr
 | |
| and
 | |
| .Fn inet_network
 | |
| functions return numbers suitable for use
 | |
| as Internet addresses and Internet network
 | |
| numbers, respectively.
 | |
| .Pp
 | |
| The function
 | |
| .Fn inet_ntop
 | |
| converts an address from network format (usually a
 | |
| .Ft struct in_addr
 | |
| or some other binary form, in network byte order) to presentation format
 | |
| (suitable for external display purposes).
 | |
| It returns NULL if a system error occurs (in which case,
 | |
| .Va errno
 | |
| will have been set), or it returns a pointer to the destination string.
 | |
| .Pp
 | |
| The routine
 | |
| .Fn inet_ntoa
 | |
| takes an Internet address and returns an
 | |
| .Tn ASCII
 | |
| string representing the address in
 | |
| .Qq dotted quad
 | |
| notation.
 | |
| .Pp
 | |
| The routine
 | |
| .Fn inet_makeaddr
 | |
| takes an Internet network number and a local network address (both in
 | |
| host order) and constructs an Internet address from it.
 | |
| Note that to convert only a single value to a
 | |
| .Ft struct in_addr
 | |
| form that value should be passed as the first parameter and
 | |
| .Ql 0L
 | |
| should be given for the second parameter.
 | |
| .Pp
 | |
| The routines
 | |
| .Fn inet_netof
 | |
| and
 | |
| .Fn inet_lnaof
 | |
| break apart Internet host addresses, returning the network number and
 | |
| local network address part, respectively (both in host order).
 | |
| .Pp
 | |
| All Internet addresses are returned in network
 | |
| order (bytes ordered from left to right).
 | |
| All network numbers and local address parts are
 | |
| returned as machine format integer values.
 | |
| .Sh INTERNET ADDRESSES (IP VERSION 4)
 | |
| Values specified using the
 | |
| .Qq dotted quad
 | |
| notation take one
 | |
| of the following forms:
 | |
| .Bd -literal -offset indent
 | |
| a.b.c.d
 | |
| a.b.c
 | |
| a.b
 | |
| a
 | |
| .Ed
 | |
| .Pp
 | |
| When four parts are specified, each is interpreted
 | |
| as a byte of data and assigned, from left to right,
 | |
| to the four bytes of an Internet address.
 | |
| Note that when an Internet address is viewed as a 32-bit
 | |
| integer quantity on a system that uses little-endian
 | |
| byte order (e.g.
 | |
| .Tn Intel i386, i486
 | |
| and
 | |
| .Tn Pentium
 | |
| processors) the bytes referred to above appear as
 | |
| .Dq Li d.c.b.a .
 | |
| That is, little-endian bytes are ordered from right to left.
 | |
| .Pp
 | |
| When a three part address is specified, the last
 | |
| part is interpreted as a 16-bit quantity and placed
 | |
| in the right-most two bytes of the network address.
 | |
| This makes the three part address format convenient
 | |
| for specifying Class B network addresses as
 | |
| .Dq Li 128.net.host .
 | |
| .Pp
 | |
| When a two part address is supplied, the last part
 | |
| is interpreted as a 24-bit quantity and placed in
 | |
| the right most three bytes of the network address.
 | |
| This makes the two part address format convenient
 | |
| for specifying Class A network addresses as
 | |
| .Dq Li net.host .
 | |
| .Pp
 | |
| When only one part is given, the value is stored
 | |
| directly in the network address without any byte
 | |
| rearrangement.
 | |
| .Pp
 | |
| All numbers supplied as
 | |
| .Dq parts
 | |
| in a
 | |
| .Qq dotted quad
 | |
| notation
 | |
| may be decimal, octal, or hexadecimal, as specified
 | |
| in the C language (i.e., a leading 0x or 0X implies
 | |
| hexadecimal; otherwise, a leading 0 implies octal;
 | |
| otherwise, the number is interpreted as decimal).
 | |
| .Sh INTERNET ADDRESSES (IP VERSION 6)
 | |
| In order to support scoped IPv6 addresses,
 | |
| the use of
 | |
| .Xr getaddrinfo 3
 | |
| and
 | |
| .Xr getnameinfo 3
 | |
| is recommended rather than the functions presented here.
 | |
| .Pp
 | |
| The presentation format of an IPv6 address is given in RFC 2373:
 | |
| .Pp
 | |
| There are three conventional forms for representing IPv6 addresses as
 | |
| text strings:
 | |
| .Bl -enum
 | |
| .It
 | |
| The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the
 | |
| hexadecimal values of the eight 16-bit pieces of the address.
 | |
| Examples:
 | |
| .Bd -literal -offset indent
 | |
| FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
 | |
| 1080:0:0:0:8:800:200C:417A
 | |
| .Ed
 | |
| .Pp
 | |
| Note that it is not necessary to write the leading zeros in an
 | |
| individual field, but there must be at least one numeral in
 | |
| every field (except for the case described in 2).
 | |
| .It
 | |
| Due to the method of allocating certain styles of IPv6
 | |
| addresses, it will be common for addresses to contain long
 | |
| strings of zero bits.
 | |
| In order to make writing addresses
 | |
| containing zero bits easier, a special syntax is available to
 | |
| compress the zeros.
 | |
| The use of ``::'' indicates multiple groups of 16-bits of zeros.
 | |
| The ``::'' can only appear once in an address.
 | |
| The ``::'' can also be used to compress the leading
 | |
| and/or trailing zeros in an address.
 | |
| .Pp
 | |
| For example the following addresses:
 | |
| .Bd -literal -offset indent
 | |
| 1080:0:0:0:8:800:200C:417A  a unicast address
 | |
| FF01:0:0:0:0:0:0:43         a multicast address
 | |
| 0:0:0:0:0:0:0:1             the loopback address
 | |
| 0:0:0:0:0:0:0:0             the unspecified addresses
 | |
| .Ed
 | |
| .Pp
 | |
| may be represented as:
 | |
| .Bd -literal -offset indent
 | |
| 1080::8:800:200C:417A       a unicast address
 | |
| FF01::43                    a multicast address
 | |
| ::1                         the loopback address
 | |
| ::                          the unspecified addresses
 | |
| .Ed
 | |
| .It
 | |
| An alternative form that is sometimes more convenient when
 | |
| dealing with a mixed environment of IPv4 and IPv6 nodes is
 | |
| x:x:x:x:x:x:d.d.d.d, where the 'x's are the hexadecimal values
 | |
| of the six high-order 16-bit pieces of the address, and the 'd's
 | |
| are the decimal values of the four low-order 8-bit pieces of the
 | |
| address (standard IPv4 representation).
 | |
| Examples:
 | |
| .Bd -literal -offset indent
 | |
| 0:0:0:0:0:0:13.1.68.3
 | |
| 0:0:0:0:0:FFFF:129.144.52.38
 | |
| .Ed
 | |
| .Pp
 | |
| or in compressed form:
 | |
| .Bd -literal -offset indent
 | |
| ::13.1.68.3
 | |
| ::FFFF:129.144.52.38
 | |
| .Ed
 | |
| .El
 | |
| .Sh DIAGNOSTICS
 | |
| The constant
 | |
| .Dv INADDR_NONE
 | |
| is returned by
 | |
| .Fn inet_addr
 | |
| and
 | |
| .Fn inet_network
 | |
| for malformed requests.
 | |
| .Sh SEE ALSO
 | |
| .Xr byteorder 3 ,
 | |
| .Xr gethostbyname 3 ,
 | |
| .Xr getnetent 3 ,
 | |
| .Xr inet_net 3 ,
 | |
| .Xr hosts 5 ,
 | |
| .Xr networks 5
 | |
| .Rs
 | |
| .%R RFC 2373
 | |
| .%D July 1998
 | |
| .%T "IP Version 6 Addressing Architecture"
 | |
| .Re
 | |
| .Rs
 | |
| .%R RFC 3493
 | |
| .%D February 2003
 | |
| .%T "Basic Socket Interface Extensions for IPv6"
 | |
| .Re
 | |
| .Sh STANDARDS
 | |
| The
 | |
| .Nm inet_ntop
 | |
| and
 | |
| .Nm inet_pton
 | |
| functions conform to
 | |
| .St -p1003.1-2001 .
 | |
| Note that
 | |
| .Nm inet_pton
 | |
| does not accept 1-, 2-, or 3-part  dotted addresses; all four parts
 | |
| must be specified.
 | |
| This is a narrower input set than that accepted by
 | |
| .Nm inet_aton .
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Nm inet_addr ,
 | |
| .Nm inet_network ,
 | |
| .Nm inet_makeaddr ,
 | |
| .Nm inet_lnaof
 | |
| and
 | |
| .Nm inet_netof
 | |
| functions appeared in
 | |
| .Bx 4.2 .
 | |
| They were changed to use
 | |
| .Va in_addr_t
 | |
| in place of
 | |
| .Va unsigned long
 | |
| in
 | |
| .Nx 2.0 .
 | |
| The
 | |
| .Nm inet_aton
 | |
| and
 | |
| .Nm inet_ntoa
 | |
| functions appeared in
 | |
| .Bx 4.3 .
 | |
| The
 | |
| .Nm inet_pton
 | |
| and
 | |
| .Nm inet_ntop
 | |
| functions appeared in BIND 4.9.4 and thence
 | |
| .Nx 1.3 ;
 | |
| they were also in
 | |
| .St -xns5.2 .
 | |
| .Sh BUGS
 | |
| The value
 | |
| .Dv INADDR_NONE
 | |
| (0xffffffff) is a valid broadcast address, but
 | |
| .Fn inet_addr
 | |
| cannot return that value without indicating failure.
 | |
| The newer
 | |
| .Fn inet_aton
 | |
| function does not share this problem.
 | |
| .Pp
 | |
| The problem of host byte ordering versus network byte ordering is
 | |
| confusing.
 | |
| .Pp
 | |
| The string returned by
 | |
| .Fn inet_ntoa
 | |
| resides in a static memory area.
 | |
| .Pp
 | |
| .Fn inet_addr
 | |
| should return a
 | |
| .Fa "struct in_addr" .
 |