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)
 {
