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