int
getifaddrs(
struct ifaddrs **ifap
)
void
freeifaddrs(
struct ifaddrs *ifp
)
)
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.
)
may fail and set
errno
for any of the errors specified for the library routines
ioctl(2),
socket(2),
malloc(3)
or
sysctl(3).
net/if.h
>
and
<
ifaddrs.h
>
are being included,
<
net/if.h
>
must
be included before
<
ifaddrs.h
>.