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.
.Rv -std getifaddrs
The getifaddrs may fail and set errno for any of the errors specified for the library routines ioctl(2), socket(2), malloc(3) or sysctl(3).
ioctl(2), socket(2), sysctl(3), networking(4), ifconfig(8)