xref: /freebsd/lib/libc/net/inet.3 (revision 535af610)
1.\" Copyright (c) 1983, 1990, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.\"     From: @(#)inet.3	8.1 (Berkeley) 6/4/93
29.\" $FreeBSD$
30.\"
31.Dd November 9, 2021
32.Dt INET 3
33.Os
34.Sh NAME
35.Nm inet_aton ,
36.Nm inet_addr ,
37.Nm inet_network ,
38.Nm inet_ntoa ,
39.Nm inet_ntoa_r ,
40.Nm inet_ntop ,
41.Nm inet_pton ,
42.Nm inet_makeaddr ,
43.Nm inet_lnaof ,
44.Nm inet_netof
45.Nd Internet address manipulation routines
46.Sh LIBRARY
47.Lb libc
48.Sh SYNOPSIS
49.In sys/types.h
50.In sys/socket.h
51.In netinet/in.h
52.In arpa/inet.h
53.Ft int
54.Fn inet_aton "const char *cp" "struct in_addr *pin"
55.Ft in_addr_t
56.Fn inet_addr "const char *cp"
57.Ft in_addr_t
58.Fn inet_network "const char *cp"
59.Ft char *
60.Fn inet_ntoa "struct in_addr in"
61.Ft char *
62.Fo inet_ntoa_r
63.Fa "struct in_addr in"
64.Fa "char *buf"
65.Fa "socklen_t size"
66.Fc
67.Ft const char *
68.Fo inet_ntop
69.Fa "int af"
70.Fa "const void * restrict src"
71.Fa "char * restrict dst"
72.Fa "socklen_t size"
73.Fc
74.Ft int
75.Fn inet_pton "int af" "const char * restrict src" "void * restrict dst"
76.Ft struct in_addr
77.Fn inet_makeaddr "in_addr_t net" "in_addr_t lna"
78.Ft in_addr_t
79.Fn inet_lnaof "struct in_addr in"
80.Ft in_addr_t
81.Fn inet_netof "struct in_addr in"
82.Sh DESCRIPTION
83The routines
84.Fn inet_aton ,
85.Fn inet_addr
86and
87.Fn inet_network
88interpret character strings representing
89numbers expressed in the Internet standard
90.Ql .\&
91notation.
92.Pp
93The
94.Fn inet_pton
95function converts a presentation format address (that is, printable form
96as held in a character string) to network format (usually a
97.Ft struct in_addr
98or some other internal binary representation, in network byte order).
99It returns 1 if the address was valid for the specified address family, or
1000 if the address was not parseable in the specified address family, or -1
101if some system error occurred (in which case
102.Va errno
103will have been set).
104This function is presently valid for
105.Dv AF_INET
106and
107.Dv AF_INET6 .
108.Pp
109The
110.Fn inet_aton
111routine interprets the specified character string as an Internet address,
112placing the address into the structure provided.
113It returns 1 if the string was successfully interpreted,
114or 0 if the string is invalid.
115The
116.Fn inet_addr
117and
118.Fn inet_network
119functions return numbers suitable for use
120as Internet addresses and Internet network
121numbers, respectively.
122.Pp
123The function
124.Fn inet_ntop
125converts an address
126.Fa *src
127from network format
128(usually a
129.Ft struct in_addr
130or some other binary form, in network byte order) to presentation format
131(suitable for external display purposes).
132The
133.Fa size
134argument specifies the size, in bytes, of the buffer
135.Fa *dst .
136.Dv INET_ADDRSTRLEN
137and
138.Dv INET6_ADDRSTRLEN
139define the maximum size required to convert an address of the respective
140type.
141It returns NULL if a system error occurs (in which case,
142.Va errno
143will have been set), or it returns a pointer to the destination string.
144This function is presently valid for
145.Dv AF_INET
146and
147.Dv AF_INET6 .
148.Pp
149The routine
150.Fn inet_ntoa
151takes an Internet address and returns an
152.Tn ASCII
153string representing the address in
154.Ql .\&
155notation.
156The routine
157.Fn inet_ntoa_r
158is the reentrant version of
159.Fn inet_ntoa .
160The deprecated routine
161.Fn inet_makeaddr
162takes an Internet network number and a local
163host address on that network, and constructs an Internet address
164from it.
165It should only be assumed to work for historical class A/B/C networks.
166The deprecated routines
167.Fn inet_netof
168and
169.Fn inet_lnaof
170break apart Internet host addresses, returning
171the network number and local host address part,
172respectively,
173assuming the historical class A/B/C network masks.
174.Pp
175All Internet addresses are returned in network
176order (bytes ordered from left to right).
177All network numbers and local address parts are
178returned as machine byte order integer values.
179.Sh INTERNET ADDRESSES
180Values specified using the
181.Ql .\&
182notation take one
183of the following forms:
184.Bd -literal -offset indent
185a.b.c.d
186a.b.c
187a.b
188a
189.Ed
190.Pp
191When four parts are specified, each is interpreted
192as a byte of data and assigned, from left to right,
193to the four bytes of an Internet address.
194.Pp
195When a three part address is specified, the last
196part is interpreted as a 16-bit quantity and placed
197in the least significant two bytes of the network address.
198.Pp
199When a two part address is supplied, the last part
200is interpreted as a 24-bit quantity and placed in
201the least significant three bytes of the network address.
202.Pp
203When only one part is given, the value is stored
204directly in the network address without any byte
205rearrangement.
206.Pp
207All numbers supplied as
208.Dq parts
209in a
210.Ql .\&
211notation
212may be decimal, octal, or hexadecimal, as specified
213in the C language (i.e., a leading 0x or 0X implies
214hexadecimal; otherwise, a leading 0 implies octal;
215otherwise, the number is interpreted as decimal).
216.Sh DIAGNOSTICS
217The constant
218.Dv INADDR_NONE
219is returned by
220.Fn inet_addr
221and
222.Fn inet_network
223for malformed requests.
224.Sh ERRORS
225The
226.Fn inet_ntop
227call fails if:
228.Bl -tag -width Er
229.It Bq Er ENOSPC
230.Fa size
231was not large enough to store the presentation form of the address.
232.It Bq Er EAFNOSUPPORT
233.Fa *src
234was not an
235.Dv AF_INET
236or
237.Dv AF_INET6
238family address.
239.El
240.Sh SEE ALSO
241.Xr byteorder 3 ,
242.Xr getaddrinfo 3 ,
243.Xr gethostbyname 3 ,
244.Xr getnameinfo 3 ,
245.Xr getnetent 3 ,
246.Xr inet_net 3 ,
247.Xr hosts 5 ,
248.Xr networks 5
249.Rs
250.%R RFC
251.%N 2373
252.%D July 1998
253.%T "IP Version 6 Addressing Architecture"
254.Re
255.Sh STANDARDS
256The
257.Fn inet_ntop
258and
259.Fn inet_pton
260functions conform to
261.St -xns5.2 .
262Note that
263.Fn inet_pton
264does not accept 1-, 2-, or 3-part dotted addresses; all four parts
265must be specified and are interpreted only as decimal values.
266This is a narrower input set than that accepted by
267.Fn inet_aton .
268.Sh HISTORY
269These
270functions appeared in
271.Bx 4.2 .
272.Sh BUGS
273The value
274.Dv INADDR_NONE
275(0xffffffff) is a valid broadcast address, but
276.Fn inet_addr
277cannot return that value without indicating failure.
278The newer
279.Fn inet_aton
280function does not share this problem.
281The problem of host byte ordering versus network byte ordering is
282confusing.
283The string returned by
284.Fn inet_ntoa
285resides in a static memory area.
286.Pp
287The
288.Fn inet_addr
289function should return a
290.Fa struct in_addr .
291