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