xref: /freebsd/lib/libc/net/getifaddrs.3 (revision b53e9221214d6406927b73c8e3d15ab8043a3bb2)
1.\"	$KAME: getifaddrs.3,v 1.4 2000/05/17 14:13:14 itojun Exp $
2.\"	BSDI	getifaddrs.3,v 2.5 2000/02/23 14:51:59 dab Exp
3.\"
4.\" Copyright (c) 1995, 1999
5.\"	Berkeley Software Design, Inc.  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.\"
13.\" THIS SOFTWARE IS PROVIDED BY Berkeley Software Design, Inc. ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL Berkeley Software Design, Inc. BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD$
26.\"
27.Dd October 12, 1995
28.Dt GETIFADDRS 3
29.Os
30.Sh NAME
31.Nm getifaddrs
32.Nd get interface addresses
33.Sh SYNOPSIS
34.In sys/types.h
35.In sys/socket.h
36.In ifaddrs.h
37.Ft int
38.Fn getifaddrs "struct ifaddrs **ifap"
39.Ft void
40.Fn freeifaddrs "struct ifaddrs *ifp"
41.Sh DESCRIPTION
42The
43.Fn getifaddrs
44function stores a reference to a linked list of the network interfaces
45on the local machine in the memory referenced by
46.Fa ifap .
47The list consists of
48.Nm ifaddrs
49structures, as defined in the include file
50.In ifaddrs.h .
51The
52.Nm ifaddrs
53structure contains at least the following entries:
54.Bd -literal
55    struct ifaddrs   *ifa_next;         /* Pointer to next struct */
56    char             *ifa_name;         /* Interface name */
57    u_int             ifa_flags;        /* Interface flags */
58    struct sockaddr  *ifa_addr;         /* Interface address */
59    struct sockaddr  *ifa_netmask;      /* Interface netmask */
60    struct sockaddr  *ifa_broadaddr;    /* Interface broadcast address */
61    struct sockaddr  *ifa_dstaddr;      /* P2P interface destination */
62    void             *ifa_data;		/* Address specific data */
63.Ed
64.Pp
65The
66.Li ifa_next
67field contains a pointer to the next structure on the list.
68This field is
69.Dv NULL
70in last structure on the list.
71.Pp
72The
73.Li ifa_name
74field contains the interface name.
75.Pp
76The
77.Li ifa_flags
78field contains the interface flags, as set by
79.Xr ifconfig 8
80utility.
81.Pp
82The
83.Li ifa_addr
84field references either the address of the interface or the link level
85address of the interface, if one exists, otherwise it is NULL.
86(The
87.Li sa_family
88field of the
89.Li ifa_addr
90field should be consulted to determine the format of the
91.Li ifa_addr
92address.)
93.Pp
94The
95.Li ifa_netmask
96field references the netmask associated with
97.Li ifa_addr ,
98if one is set, otherwise it is NULL.
99.Pp
100The
101.Li ifa_broadaddr
102field,
103which should only be referenced for non-P2P interfaces,
104references the broadcast address associated with
105.Li ifa_addr ,
106if one exists, otherwise it is NULL.
107.Pp
108The
109.Li ifa_dstaddr
110field references the destination address on a P2P interface,
111if one exists, otherwise it is NULL.
112.Pp
113The
114.Li ifa_data
115field references address family specific data.
116For
117.Dv AF_LINK
118addresses it contains a pointer to the
119.Fa struct if_data
120(as defined in include file
121.In net/if.h )
122which contains various interface attributes and statistics.
123For all other address families, it contains a pointer to the
124.Fa struct ifa_data
125(as defined in include file
126.In net/if.h )
127which contains per-address interface statistics.
128.Pp
129The data returned by
130.Fn getifaddrs
131is dynamically allocated and should be freed using
132.Fn freeifaddrs
133when no longer needed.
134.Sh RETURN VALUES
135.Rv -std getifaddrs
136.Sh ERRORS
137The
138.Fn getifaddrs
139may fail and set
140.Va errno
141for any of the errors specified for the library routines
142.Xr ioctl 2 ,
143.Xr socket 2 ,
144.Xr malloc 3
145or
146.Xr sysctl 3 .
147.Sh SEE ALSO
148.Xr ioctl 2 ,
149.Xr socket 2 ,
150.Xr sysctl 3 ,
151.Xr networking 4 ,
152.Xr ifconfig 8
153.Sh HISTORY
154The
155.Nm
156implementation first appeared in BSDi
157.Bsx .
158.Sh BUGS
159If both
160.In net/if.h
161and
162.In ifaddrs.h
163are being included,
164.In net/if.h
165.Em must
166be included before
167.In ifaddrs.h .
168