getifaddrs
— get
interface addresses
#include
<ifaddrs.h>
int
getifaddrs
(struct
ifaddrs **ifap);
void
freeifaddrs
(struct
ifaddrs *ifp);
The
getifaddrs
()
function stores a reference to a linked list of the network interfaces on
the local machine in the memory referenced by ifap.
The list consists of ifaddrs
structures, as defined
in the include file
<ifaddrs.h>
. The
ifaddrs
structure contains at least the following
entries:
struct ifaddrs *ifa_next; /* Pointer to next struct */
char *ifa_name; /* Interface name */
u_int ifa_flags; /* Interface flags */
struct sockaddr *ifa_addr; /* Interface address */
struct sockaddr *ifa_netmask; /* Interface netmask */
struct sockaddr *ifa_broadaddr; /* Interface broadcast address */
struct sockaddr *ifa_dstaddr; /* P2P interface destination */
void *ifa_data; /* Address specific data */
The ifa_next
field contains a pointer to
the next structure on the list. This field is NULL
in last structure on the list.
The ifa_name
field contains the interface
name.
The ifa_flags
field contains the interface
flags, as set by
ifconfig(8)
utility.
The ifa_addr
field references either the
address of the interface or the link level address of the interface, if one
exists, otherwise it is NULL. (The sa_family
field
of the ifa_addr
field should be consulted to
determine the format of the ifa_addr
address.)
The ifa_netmask
field references the
netmask associated with ifa_addr
, if one is set,
otherwise it is NULL.
The ifa_broadaddr
field, which should only
be referenced for non-P2P interfaces, references the broadcast address
associated with ifa_addr
, if one exists, otherwise
it is NULL.
The ifa_dstaddr
field references the
destination address on a P2P interface, if one exists, otherwise it is
NULL.
The ifa_data
field references address
family specific data in a pointer to the struct
if_data (as defined in include file
<net/if.h>
). For
AF_LINK
addresses, it contains various interface
attributes and statistics. For all other address families, it contains
per-address interface statistics.
The data returned by
getifaddrs
()
is dynamically allocated and should be freed using
freeifaddrs
()
when no longer needed.
The getifaddrs
() function returns the
value 0 if successful; otherwise the value -1 is returned and
the global variable errno is set to indicate the
error.
The getifaddrs
implementation first
appeared in BSDi BSD/OS.