1.\" $OpenBSD: inet.3,v 1.19 2005/07/22 04:50:51 jaredy Exp $ 2.\" $NetBSD: inet.3,v 1.7 1997/06/18 02:25:24 lukem Exp $ 3.\" 4.\" Copyright (c) 1983, 1990, 1991, 1993 5.\" The Regents of the University of California. All rights reserved. 6.\" 7.\" Redistribution and use in source and binary forms, with or without 8.\" modification, are permitted provided that the following conditions 9.\" are met: 10.\" 1. Redistributions of source code must retain the above copyright 11.\" notice, this list of conditions and the following disclaimer. 12.\" 2. Redistributions in binary form must reproduce the above copyright 13.\" notice, this list of conditions and the following disclaimer in the 14.\" documentation and/or other materials provided with the distribution. 15.\" 3. Neither the name of the University nor the names of its contributors 16.\" may be used to endorse or promote products derived from this software 17.\" without specific prior written permission. 18.\" 19.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" SUCH DAMAGE. 30.\" 31.\" @(#)inet.3 8.1 (Berkeley) 6/4/93 32.\" 33.Dd June 18, 1997 34.Dt INET 3 35.Os 36.Sh NAME 37.Nm inet_addr , 38.Nm inet_aton , 39.Nm inet_lnaof , 40.Nm inet_makeaddr , 41.Nm inet_netof , 42.Nm inet_network , 43.Nm inet_ntoa , 44.Nm inet_ntop , 45.Nm inet_pton 46.Nd Internet address manipulation routines 47.Sh SYNOPSIS 48.Fd #include <sys/types.h> 49.Fd #include <sys/socket.h> 50.Fd #include <netinet/in.h> 51.Fd #include <arpa/inet.h> 52.Ft in_addr_t 53.Fn inet_addr "const char *cp" 54.Ft int 55.Fn inet_aton "const char *cp" "struct in_addr *addr" 56.Ft in_addr_t 57.Fn inet_lnaof "struct in_addr in" 58.Ft struct in_addr 59.Fn inet_makeaddr "in_addr_t net" "in_addr_t lna" 60.Ft in_addr_t 61.Fn inet_netof "struct in_addr in" 62.Ft in_addr_t 63.Fn inet_network "const char *cp" 64.Ft char * 65.Fn inet_ntoa "struct in_addr in" 66.Ft const char * 67.Fn inet_ntop "int af" "const void *src" "char *dst" "size_t size" 68.Ft int 69.Fn inet_pton "int af" "const char *src" "void *dst" 70.Sh DESCRIPTION 71The routines 72.Fn inet_aton , 73.Fn inet_addr , 74and 75.Fn inet_network 76interpret character strings representing 77numbers expressed in the Internet standard 78.Ql \&. 79notation. 80The 81.Fn inet_pton 82function converts a presentation format address (that is, printable form 83as held in a character string) to network format (usually a 84.Li struct in_addr 85or some other internal binary representation, in network byte order). 86It returns 1 if the address was valid for the specified address family; 870 if the address wasn't parseable in the specified address family; or \-1 88if some system error occurred (in which case 89.Va errno 90will have been set). 91This function is presently valid for 92.Dv AF_INET 93and 94.Dv AF_INET6 . 95The 96.Fn inet_aton 97routine interprets the specified character string as an Internet address, 98placing the address into the structure provided. 99It returns 1 if the string was successfully interpreted, 100or 0 if the string was invalid. 101The 102.Fn inet_addr 103and 104.Fn inet_network 105functions return numbers suitable for use 106as Internet addresses and Internet network 107numbers, respectively. 108.Pp 109The function 110.Fn inet_ntop 111converts an address from network format (usually a 112.Li struct in_addr 113or some other binary form, in network byte order) to presentation format 114(suitable for external display purposes). 115It returns 116.Dv NULL 117if a system 118error occurs (in which case, 119.Va errno 120will have been set), or it returns a pointer to the destination string. 121The routine 122.Fn inet_ntoa 123takes an Internet address and returns an 124.Tn ASCII 125string representing the address in 126.Ql \&. 127notation. 128The routine 129.Fn inet_makeaddr 130takes an Internet network number and a local 131network address and constructs an Internet address 132from it. 133The routines 134.Fn inet_netof 135and 136.Fn inet_lnaof 137break apart Internet host addresses, returning 138the network number and local network address part, 139respectively. 140.Pp 141All Internet addresses are returned in network 142order (bytes ordered from left to right). 143All network numbers and local address parts are 144returned as machine format integer values. 145.Sh INTERNET ADDRESSES (IP VERSION 4) 146Values specified using the 147.Ql \&. 148notation take one 149of the following forms: 150.Bd -literal -offset indent 151a.b.c.d 152a.b.c 153a.b 154a 155.Ed 156.Pp 157When four parts are specified, each is interpreted 158as a byte of data and assigned, from left to right, 159to the four bytes of an Internet address. 160Note that when an Internet address is viewed as a 32-bit 161integer quantity on a system that uses little-endian 162byte order (such as the 163.Tn Intel 386, 486 164and 165.Tn Pentium 166processors) the bytes referred to above appear as 167.Dq Li d.c.b.a . 168That is, little-endian bytes are ordered from right to left. 169.Pp 170When a three part address is specified, the last 171part is interpreted as a 16-bit quantity and placed 172in the rightmost two bytes of the network address. 173This makes the three part address format convenient 174for specifying Class B network addresses as 175.Dq Li 128.net.host . 176.Pp 177When a two part address is supplied, the last part 178is interpreted as a 24-bit quantity and placed in 179the rightmost three bytes of the network address. 180This makes the two part address format convenient 181for specifying Class A network addresses as 182.Dq Li net.host . 183.Pp 184When only one part is given, the value is stored 185directly in the network address without any byte 186rearrangement. 187.Pp 188All numbers supplied as 189.Dq parts 190in a 191.Ql \&. 192notation 193may be decimal, octal, or hexadecimal, as specified 194in the C language (i.e., a leading 0x or 0X implies 195hexadecimal; a leading 0 implies octal; 196otherwise, the number is interpreted as decimal). 197.Sh INTERNET ADDRESSES (IP VERSION 6) 198In order to support scoped IPv6 addresses, 199.Xr getaddrinfo 3 200and 201.Xr getnameinfo 3 202are recommended rather than the functions presented here. 203.Pp 204The presentation format of an IPv6 address is given in RFC 2373: 205.Pp 206There are three conventional forms for representing IPv6 addresses as 207text strings: 208.Bl -enum 209.It 210The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the 211hexadecimal values of the eight 16-bit pieces of the address. 212Examples: 213.Bd -literal -offset indent 214FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 2151080:0:0:0:8:800:200C:417A 216.Ed 217.Pp 218Note that it is not necessary to write the leading zeros in an 219individual field, but there must be at least one numeral in 220every field (except for the case described in 2.). 221.It 222Due to the method of allocating certain styles of IPv6 223addresses, it will be common for addresses to contain long 224strings of zero bits. 225In order to make writing addresses 226containing zero bits easier, a special syntax is available to 227compress the zeros. 228The use of 229.Dq \&:\&: 230indicates multiple groups 231of 16 bits of zeros. 232The 233.Dq \&:\&: 234can only appear once in an 235address. 236The 237.Dq \&:\&: 238can also be used to compress the leading and/or trailing zeros in an address. 239.Pp 240For example the following addresses: 241.Bd -literal -offset indent 2421080:0:0:0:8:800:200C:417A a unicast address 243FF01:0:0:0:0:0:0:43 a multicast address 2440:0:0:0:0:0:0:1 the loopback address 2450:0:0:0:0:0:0:0 the unspecified addresses 246.Ed 247.Pp 248may be represented as: 249.Bd -literal -offset indent 2501080::8:800:200C:417A a unicast address 251FF01::43 a multicast address 252::1 the loopback address 253:: the unspecified addresses 254.Ed 255.It 256An alternative form that is sometimes more convenient when 257dealing with a mixed environment of IPv4 and IPv6 nodes is 258x:x:x:x:x:x:d.d.d.d, where the 'x's are the hexadecimal values 259of the six high-order 16-bit pieces of the address, and the 'd's 260are the decimal values of the four low-order 8-bit pieces of the 261address (standard IPv4 representation). 262Examples: 263.Bd -literal -offset indent 2640:0:0:0:0:0:13.1.68.3 2650:0:0:0:0:FFFF:129.144.52.38 266.Ed 267.Pp 268or in compressed form: 269.Bd -literal -offset indent 270::13.1.68.3 271::FFFF:129.144.52.38 272.Ed 273.El 274.Sh DIAGNOSTICS 275The constant 276.Dv INADDR_NONE 277is returned by 278.Fn inet_addr 279and 280.Fn inet_network 281for malformed requests. 282.Sh SEE ALSO 283.Xr byteorder 3 , 284.Xr gethostbyname 3 , 285.Xr getnetent 3 , 286.Xr inet_net 3 , 287.Xr hosts 5 , 288.Xr networks 5 289.Rs 290.%R RFC 2373 291.%D July 1998 292.%T "IP Version 6 Addressing Architecture" 293.Re 294.Rs 295.%R RFC 3493 296.%D February 2003 297.%T "Basic Socket Interface Extensions for IPv6" 298.Re 299.Sh STANDARDS 300The 301.Nm inet_ntop 302and 303.Nm inet_pton 304functions conform to the IETF IPv6 BSD API and address formatting 305specifications. 306Note that 307.Nm inet_pton 308does not accept 1-, 2-, or 3-part dotted addresses; all four parts 309must be specified. 310This is a narrower input set than that accepted by 311.Nm inet_aton . 312.Sh HISTORY 313The 314.Nm inet_addr , 315.Nm inet_network , 316.Nm inet_makeaddr , 317.Nm inet_lnaof , 318and 319.Nm inet_netof 320functions appeared in 321.Bx 4.2 . 322The 323.Nm inet_aton 324and 325.Nm inet_ntoa 326functions appeared in 327.Bx 4.3 . 328The 329.Nm inet_pton 330and 331.Nm inet_ntop 332functions appeared in BIND 4.9.4. 333.Sh BUGS 334The value 335.Dv INADDR_NONE 336(0xffffffff) is a valid broadcast address, but 337.Fn inet_addr 338cannot return that value without indicating failure. 339Also, 340.Fn inet_addr 341should have been designed to return a 342.Li struct in_addr . 343The newer 344.Fn inet_aton 345function does not share these problems, and almost all existing code 346should be modified to use 347.Fn inet_aton 348instead. 349.Pp 350The problem of host byte ordering versus network byte ordering is 351confusing. 352.Pp 353The string returned by 354.Fn inet_ntoa 355resides in a static memory area. 356