GETIFADDRS(3) | Library Functions Manual | GETIFADDRS(3)

# NAME

`getifaddrs`, `freeifaddrs` — get interface addresses

# SYNOPSIS

`#include <sys/types.h>`
`#include <sys/socket.h>`
`#include <ifaddrs.h>`

int
`getifaddrs`(struct ifaddrs **ifap);

void
`freeifaddrs`(struct ifaddrs *ifap);

# 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 */

ifa_next
  Contains a pointer to the next structure on the list. This field is set to `NULL` in the last structure on the list.
ifa_name
  Contains the interface name.
ifa_flags
  Contains the interface flags, as set by ifconfig(8).
ifa_addr
  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.)
ifa_netmask
  References the netmask associated with ifa_addr, if one is set, otherwise it is `NULL`.
ifa_broadaddr
  This 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`.
ifa_dstaddr
  This field, which should only be referenced for P2P interfaces, references the destination address on a P2P interface, if one exists, otherwise it is `NULL`.
ifa_data
  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, ifa_data 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, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

# ERRORS

The `getifaddrs`() function may fail and set errno for any of the errors specified for the library routines ioctl(2), socket(2), malloc(3), or sysctl(2).

# SEE ALSO

ioctl(2), socket(2), sysctl(2), netintro(4), ifconfig(8)

# HISTORY

The `getifaddrs`() function first appeared in BSDI BSD/OS. The function has been available on OpenBSD since OpenBSD 2.7.

# BUGS

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

March 29, 2022 | Debian