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
.In 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.
For
AF_LINK
addresses it contains a pointer to the
struct if_data
(as defined in include file
.In net/if.h )
which contains various interface attributes and statistics.
For all other address families, it contains a pointer to the
struct ifa_data
(as defined in include file
.In net/if.h )
which contains per-address interface statistics.
The data returned by
getifaddrs
is dynamically allocated and should be freed using
freeifaddrs
when no longer needed.