---
name: "freeifaddrs"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/freeifaddrs"
---

# freeifaddrs(3)

get interface addresses

## NAME

**getifaddrs** – get interface addresses

## SYNOPSIS

**#include \<ifaddrs.h\>**

*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)](/ifconfig/8.md) 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 in a pointer to the *struct*, *if\_data* (as defined in include file ⟨net/if.h⟩). For AF\_LINK addresses, it contains various interface attributes and statistics. For all other address families, it contains per-address interface statistics.

The data returned by **getifaddrs**() is dynamically allocated and should be freed using **freeifaddrs**() when no longer needed.

## RETURN VALUES

The **getifaddrs()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable 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)](/ioctl/2.md), [socket(2)](/socket/2.md), [malloc(3)](/malloc/3.md) or [sysctl(3)](/sysctl/3.md).

## SEE ALSO

[ioctl(2)](/ioctl/2.md), [socket(2)](/socket/2.md), [sysctl(3)](/sysctl/3.md), [networking(4)](/networking/4.md), [ifconfig(8)](/ifconfig/8.md)

## HISTORY

The **getifaddrs** implementation first appeared in BSDi BSD/OS.

## BUGS

If both ⟨net/if.h⟩ and ⟨ifaddrs.h⟩ are being included, ⟨net/if.h⟩ *must* be included before ⟨ifaddrs.h⟩.
