Index: sys/net/if.c
===================================================================
RCS file: /cvsroot/src/sys/net/if.c,v
retrieving revision 1.327
diff -p -u -r1.327 if.c
--- sys/net/if.c        23 Mar 2016 07:05:28 -0000      1.327
+++ sys/net/if.c        3 Apr 2016 09:46:16 -0000
@@ -882,6 +882,29 @@ bad:
       return;
}

+/*
+ * Access interface list
+ */
+struct ifnet *
+ifnet_first(void)
+{
+
+       return TAILQ_FIRST(&ifnet_list);
+}
+
+int
+ifnet_empty(void)
+{
+
+       return TAILQ_EMPTY(&ifnet_list);
+}
+
+struct ifnet *
+ifnet_next(struct ifnet *ifp)
+{
+
+       return TAILQ_NEXT(ifp, if_list);
+}

/*
 * The common interface input routine that is called by device drivers,
Index: sys/net/if.h
===================================================================
RCS file: /cvsroot/src/sys/net/if.h,v
retrieving revision 1.198
diff -p -u -r1.198 if.h
--- sys/net/if.h        19 Feb 2016 20:05:43 -0000      1.198
+++ sys/net/if.h        3 Apr 2016 09:46:16 -0000
@@ -885,6 +885,9 @@ MALLOC_DECLARE(M_IFMADDR);

int ifreq_setaddr(u_long, struct ifreq *, const struct sockaddr *);

+int ifnet_empty(void);
+struct ifnet *ifnet_first(void);
+struct ifnet *ifnet_next(struct ifnet *);
struct ifnet *if_alloc(u_char);
void if_free(struct ifnet *);
void if_initname(struct ifnet *, const char *, int);
@@ -987,10 +990,10 @@ __END_DECLS

#ifdef _KERNEL

-#define        IFNET_FIRST()                   TAILQ_FIRST(&ifnet_list)
-#define        IFNET_EMPTY()                   TAILQ_EMPTY(&ifnet_list)
-#define        IFNET_NEXT(__ifp)               TAILQ_NEXT((__ifp), if_list)
-#define        IFNET_FOREACH(__ifp)            TAILQ_FOREACH(__ifp, &ifnet_list, if_list)
+#define        IFNET_FIRST()                   ifnet_first()
+#define        IFNET_EMPTY()                   ifnet_empty()
+#define        IFNET_NEXT(__ifp)               ifnet_next(__ifp)
+#define        IFNET_FOREACH(__ifp)            for ((__ifp) = ifnet_first(); (__ifp); (__ifp) = ifnet_next(__ifp))
#define        IFADDR_FIRST(__ifp)             TAILQ_FIRST(&(__ifp)->if_addrlist)
#define        IFADDR_NEXT(__ifa)              TAILQ_NEXT((__ifa), ifa_list)
#define        IFADDR_FOREACH(__ifa, __ifp)    TAILQ_FOREACH(__ifa, \
@@ -1000,7 +1003,6 @@ __END_DECLS
                                           &(__ifp)->if_addrlist, ifa_list, __nifa)
#define        IFADDR_EMPTY(__ifp)             TAILQ_EMPTY(&(__ifp)->if_addrlist)

-extern struct ifnet_head ifnet_list;
extern struct ifnet *lo0ifp;

ifnet_t *      if_byindex(u_int);
Index: sys/rump/librump/rumpnet/net_stub.c
===================================================================
RCS file: /cvsroot/src/sys/rump/librump/rumpnet/net_stub.c,v
retrieving revision 1.21
diff -p -u -r1.21 net_stub.c
--- sys/rump/librump/rumpnet/net_stub.c 2 Dec 2014 14:34:19 -0000       1.21
+++ sys/rump/librump/rumpnet/net_stub.c 3 Apr 2016 09:46:18 -0000
@@ -62,6 +62,16 @@ __weak_alias(ieee8023ad_marker_input,rum

struct ifnet_head ifnet_list;

+/* if */
+struct ifnet *rumpnet_ifnet_first(void);
+struct ifnet *
+rumpnet_ifnet_first(void)
+{
+       return NULL;
+}
+__weak_alias(ifnet_first,rumpnet_ifnet_first);
+__weak_alias(ifnet_next,rumpnet_stub);
+
int
compat_ifconf(u_long cmd, void *data)
{