getifaddrs(3): Add ifa_addrflags to struct ifaddrs
authorRoy Marples <roy@marples.name>
Thu, 12 Sep 2019 09:29:30 +0000 (10:29 +0100)
committerRoy Marples <roy@marples.name>
Thu, 12 Sep 2019 09:29:30 +0000 (10:29 +0100)
This saves a SIOCGIFAFLAG_IN6 ioctl per IPv6 address when
you're also interested in how useable the address is.

Taken-from: NetBSD

include/ifaddrs.h
lib/libc/net/getifaddrs.3
lib/libc/net/getifaddrs.c

index ec23f6c..055d8a4 100644 (file)
@@ -37,6 +37,7 @@ struct ifaddrs {
        struct sockaddr *ifa_netmask;
        struct sockaddr *ifa_dstaddr;
        void            *ifa_data;
+       u_int            ifa_addrflags;
 };
 
 /*
index 4c9bf3f..3dfdda7 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: src/lib/libc/net/getifaddrs.3,v 1.10 2005/02/09 18:03:13 ru Exp $
 .\"
-.Dd February 24, 2014
+.Dd 12 September, 2019
 .Dt GETIFADDRS 3
 .Os
 .Sh NAME
@@ -61,6 +61,7 @@ structure contains at least the following entries:
     struct sockaddr  *ifa_netmask;      /* Interface netmask */
     struct sockaddr  *ifa_dstaddr;      /* P2P interface destination */
     void             *ifa_data;         /* Address specific data */
+    u_int             ifa_addrflags;    /* Family specific address flags */
 .Ed
 .Pp
 The
@@ -112,6 +113,10 @@ references the broadcast address associated with
 if one exists, otherwise it is NULL.
 It is really just another name for
 .Fa ifa_dstaddr .
+.PP
+The
+.Fa ifa_addrflags
+field contains the address flags, which are specific to the address family.
 .Pp
 The
 .Fa ifa_data
@@ -158,6 +163,10 @@ The
 .Nm
 implementation first appeared in BSDi
 .Bsx .
+.Pp
+.Fa if_addrflags
+was added in
+.Nx 8.0 .
 .Sh BUGS
 If both
 .In net/if.h
index 6b831f1..c3a5992 100644 (file)
@@ -247,6 +247,7 @@ getifaddrs(struct ifaddrs **pif)
                        ift->ifa_name = cif->ifa_name;
                        ift->ifa_flags = cif->ifa_flags;
                        ift->ifa_data = NULL;
+                       ift->ifa_addrflags = ifam->ifam_addrflags;
                        p = (char *)(void *)(ifam + 1);
                        /* Scan to look for length of address */
                        alen = 0;