October 12, 1995 GETIFADDRS 3

### NAME

getifaddrs - get interface addresses

### SYNOPSIS

```int` getifaddrs(```struct ifaddrs **ifap`)
```void` freeifaddrs(```struct ifaddrs *ifp`)

### DESCRIPTION

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.

### RETURN VALUES

Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.

### ERRORS

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).

### SEE ALSO

ioctl(2), socket(2), sysctl(3), networking(4), ifconfig(8)

### HISTORY

The getifaddrs implementation first appeared in

### BUGS

If both <```net/if.h`> and <```ifaddrs.h`> are being included, <```net/if.h`> must be included before <```ifaddrs.h`>.