PERFORCE change 113246 for review

Marko Zec zec at FreeBSD.org
Sun Jan 21 10:02:29 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=113246

Change 113246 by zec at zec_tpx32 on 2007/01/21 10:02:25

	Provide access to the virtualized "ifnet" symbol in several
	linux compatibility routines.

Affected files ...

.. //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#2 edit
.. //depot/projects/vimage/src/sys/compat/linux/linux_ioctl.c#2 edit

Differences ...

==== //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#2 (text+ko) ====

@@ -42,6 +42,9 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.101 2006/11/27 21:10:55 jkim Exp $");
 
+#include "opt_compat.h"
+#include "opt_vimage.h"
+
 #include <sys/param.h>
 #include <sys/queue.h>
 #include <sys/blist.h>
@@ -68,7 +71,9 @@
 #include <sys/user.h>
 #include <sys/vmmeter.h>
 #include <sys/vnode.h>
+#include <sys/vimage.h>
 
+#include <net/vnet.h>
 #include <net/if.h>
 
 #include <vm/vm.h>
@@ -85,7 +90,6 @@
 #include <machine/md_var.h>
 #endif /* __i386__ || __amd64__ */
 
-#include "opt_compat.h"
 #ifdef COMPAT_LINUX32				/* XXX */
 #include <machine/../linux32/linux.h>
 #else
@@ -902,6 +906,7 @@
 static int
 linprocfs_donetdev(PFS_FILL_ARGS)
 {
+	INIT_VNET_NET(curthread->td_vimage->v_vnetb);
 	char ifname[16]; /* XXX LINUX_IFNAMSIZ */
 	struct ifnet *ifp;
 
@@ -911,7 +916,7 @@
 	    "bytes    packets errs drop fifo frame compressed");
 
 	IFNET_RLOCK();
-	TAILQ_FOREACH(ifp, &ifnet, if_link) {
+	TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
 		linux_ifname(ifp, ifname, sizeof ifname);
 			sbuf_printf(sb, "%6.6s:", ifname);
 		sbuf_printf(sb, "%8lu %7lu %4lu %4lu %4lu %5lu %10lu %9lu ",

==== //depot/projects/vimage/src/sys/compat/linux/linux_ioctl.c#2 (text+ko) ====

@@ -29,6 +29,9 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/sys/compat/linux/linux_ioctl.c,v 1.137 2006/07/06 21:42:36 jhb Exp $");
 
+#include "opt_vimage.h"
+#include "opt_compat.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/sysproto.h>
@@ -56,12 +59,13 @@
 #include <sys/sx.h>
 #include <sys/tty.h>
 #include <sys/uio.h>
+#include <sys/vimage.h>
+
+#include <net/vnet.h>
 #include <net/if.h>
 #include <net/if_dl.h>
 #include <net/if_types.h>
 
-#include "opt_compat.h"
-
 #ifdef COMPAT_LINUX32
 #include <machine/../linux32/linux.h>
 #include <machine/../linux32/linux32_proto.h>
@@ -2028,6 +2032,7 @@
 int
 linux_ifname(struct ifnet *ifp, char *buffer, size_t buflen)
 {
+	INIT_VNET_NET(ifp->if_vnetb);
 	struct ifnet *ifscan;
 	int ethno;
 
@@ -2038,7 +2043,7 @@
 	/* Determine the (relative) unit number for ethernet interfaces */
 	ethno = 0;
 	IFNET_RLOCK();
-	TAILQ_FOREACH(ifscan, &ifnet, if_link) {
+	TAILQ_FOREACH(ifscan, &V_ifnet, if_link) {
 		if (ifscan == ifp) {
 			IFNET_RUNLOCK();
 			return (snprintf(buffer, buflen, "eth%d", ethno));
@@ -2061,6 +2066,7 @@
 static struct ifnet *
 ifname_linux_to_bsd(const char *lxname, char *bsdname)
 {
+	INIT_VNET_NET(curthread->td_vimage->v_vnetb);
 	struct ifnet *ifp;
 	int len, unit;
 	char *ep;
@@ -2077,7 +2083,7 @@
 	index = 0;
 	is_eth = (len == 3 && !strncmp(lxname, "eth", len)) ? 1 : 0;
 	IFNET_RLOCK();
-	TAILQ_FOREACH(ifp, &ifnet, if_link) {
+	TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
 		/*
 		 * Allow Linux programs to use FreeBSD names. Don't presume
 		 * we never have an interface named "eth", so don't make
@@ -2101,6 +2107,7 @@
 static int
 linux_ifconf(struct thread *td, struct ifconf *uifc)
 {
+	INIT_VNET_NET(td->td_vimage->v_vnetb);
 #ifdef COMPAT_LINUX32
 	struct l_ifconf ifc;
 #else
@@ -2121,7 +2128,7 @@
 	/* handle the 'request buffer size' case */
 	if (ifc.ifc_buf == PTROUT(NULL)) {
 		ifc.ifc_len = 0;
-		TAILQ_FOREACH(ifp, &ifnet, if_link) {
+		TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
 			TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
 				struct sockaddr *sa = ifa->ifa_addr;
 				if (sa->sa_family == AF_INET)
@@ -2148,7 +2155,7 @@
 
 	/* Return all AF_INET addresses of all interfaces */
 	IFNET_RLOCK();		/* could sleep XXX */
-	TAILQ_FOREACH(ifp, &ifnet, if_link) {
+	TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
 		int addrs = 0;
 
 		bzero(&ifr, sizeof(ifr));


More information about the p4-projects mailing list