Date: Wed, 26 Jan 2011 16:04:16 +0200 From: Mikolaj Golub <to.my.trociny@gmail.com> To: "Bjoern A. Zeeb" <bzeeb-lists@lists.zabbadoz.net> Cc: freebsd-emulation@freebsd.org, FreeBSD virtualization mailing list <freebsd-virtualization@freebsd.org> Subject: Re: VirtualBox + VIMAGE Message-ID: <86aainkbhb.fsf@zhuzha.ua1> In-Reply-To: <20110126091038.C3489@maildrop.int.zabbadoz.net> (Bjoern A. Zeeb's message of "Wed, 26 Jan 2011 09:15:46 %2B0000 (UTC)") References: <86oc77heqk.fsf@kopusha.home.net> <4D3D2DE9.2060004@freebsd.org> <86tygwy9p0.fsf@kopusha.home.net> <20110126091038.C3489@maildrop.int.zabbadoz.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
BAZ> I think you should wrap the CURVNET changes in __FreeBSD_version
BAZ> checks so that the port, should it run elsewhere or on older FreeBSDs
BAZ> (if it runs there) not trouble people having to patch it away.
BAZ> #if defined(__FreeBSD_version) && __FreeBSD_version >= 800500
BAZ> #endif
BAZ> might be a save bet.
Thanks. Something like in the patch below?
Note, I have not run this version yet. Will test it tonight or tomorrow.
--
Mikolaj Golub
[-- Attachment #2 --]
diff -rpu VirtualBox-3.2.12_OSE.orig/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile VirtualBox-3.2.12_OSE/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile
--- VirtualBox-3.2.12_OSE.orig/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile 2010-12-01 19:09:33.000000000 +0200
+++ VirtualBox-3.2.12_OSE/src/VBox/HostDrivers/VBoxNetFlt/freebsd/Makefile 2011-01-26 15:47:27.000000000 +0200
@@ -26,6 +26,10 @@ CFLAGS += -DRT_OS_FREEBSD -DIN_RING0 -DI
CFLAGS += -DRT_ARCH_AMD64
.endif
+.if defined(VIMAGE)
+ CFLAGS += -DVIMAGE
+.endif
+
SRCS = \
VBoxNetFlt-freebsd.c \
VBoxNetFlt.c \
diff -rpu VirtualBox-3.2.12_OSE.orig/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c VirtualBox-3.2.12_OSE/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c
--- VirtualBox-3.2.12_OSE.orig/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2010-12-01 19:09:33.000000000 +0200
+++ VirtualBox-3.2.12_OSE/src/VBox/HostDrivers/VBoxNetFlt/freebsd/VBoxNetFlt-freebsd.c 2011-01-26 15:56:41.000000000 +0200
@@ -97,6 +97,21 @@ static int ng_vboxnetflt_mod_even
/** mbuf packet tag */
#define PACKET_TAG_VBOX 128
+#if defined(__FreeBSD_version) && __FreeBSD_version >= 800500
+#include <sys/jail.h>
+#include <net/vnet.h>
+
+#define VBOXCURVNET_SET(arg) CURVNET_SET_QUIET(arg)
+#define VBOXCURVNET_SET_FROM_UCRED() VBOXCURVNET_SET(CRED_TO_VNET(curthread->td_ucred))
+#define VBOXCURVNET_RESTORE() CURVNET_RESTORE()
+
+#else
+
+#define VBOXCURVNET_SET(arg)
+#define VBOXCURVNET_SET_FROM_UCRED()
+#define VBOXCURVNET_RESTORE()
+#endif
+
/*
* Netgraph command list, we don't support any
* additional commands.
@@ -322,6 +337,7 @@ static int ng_vboxnetflt_rcvdata(hook_p
struct m_tag *mtag;
bool fActive;
+ VBOXCURVNET_SET(ifp->if_vnet);
fActive = vboxNetFltTryRetainBusyActive(pThis);
NGI_GET_M(item, m);
@@ -346,6 +362,7 @@ static int ng_vboxnetflt_rcvdata(hook_p
ether_demux(ifp, m);
if (fActive)
vboxNetFltRelease(pThis, true /*fBusy*/);
+ VBOXCURVNET_RESTORE();
return (0);
}
mtx_lock_spin(&pThis->u.s.inq.ifq_mtx);
@@ -363,6 +380,7 @@ static int ng_vboxnetflt_rcvdata(hook_p
int rc = ether_output_frame(ifp, m);
if (fActive)
vboxNetFltRelease(pThis, true /*fBusy*/);
+ VBOXCURVNET_RESTORE();
return rc;
}
mtx_lock_spin(&pThis->u.s.outq.ifq_mtx);
@@ -377,6 +395,7 @@ static int ng_vboxnetflt_rcvdata(hook_p
if (fActive)
vboxNetFltRelease(pThis, true /*fBusy*/);
+ VBOXCURVNET_RESTORE();
return (0);
}
@@ -409,6 +428,7 @@ static void vboxNetFltFreeBSDinput(void
bool fDropIt = false, fActive;
PINTNETSG pSG;
+ VBOXCURVNET_SET(ifp->if_vnet);
vboxNetFltRetain(pThis, true /* fBusy */);
for (;;)
{
@@ -438,6 +458,7 @@ static void vboxNetFltFreeBSDinput(void
ether_demux(ifp, m);
}
vboxNetFltRelease(pThis, true /* fBusy */);
+ VBOXCURVNET_RESTORE();
}
/**
@@ -452,6 +473,7 @@ static void vboxNetFltFreeBSDoutput(void
bool fDropIt = false, fActive;
PINTNETSG pSG;
+ VBOXCURVNET_SET(ifp->if_vnet);
vboxNetFltRetain(pThis, true /* fBusy */);
for (;;)
{
@@ -481,6 +503,7 @@ static void vboxNetFltFreeBSDoutput(void
ether_output_frame(ifp, m);
}
vboxNetFltRelease(pThis, true /* fBusy */);
+ VBOXCURVNET_RESTORE();
}
/**
@@ -498,6 +521,7 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS
int error;
ifp = (void *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);
+ VBOXCURVNET_SET(ifp->if_vnet);
if (fDst & INTNETTRUNKDIR_WIRE)
{
@@ -539,6 +563,7 @@ int vboxNetFltPortOsXmit(PVBOXNETFLTINS
m->m_pkthdr.rcvif = ifp;
ifp->if_input(ifp, m);
}
+ VBOXCURVNET_RESTORE();
return VINF_SUCCESS;
}
@@ -556,6 +581,7 @@ int vboxNetFltOsInitInstance(PVBOXNETFLT
node_p node;
RTSPINLOCKTMP Tmp = RTSPINLOCKTMP_INITIALIZER;
+ VBOXCURVNET_SET_FROM_UCRED();
NOREF(pvContext);
ifp = ifunit(pThis->szName);
if (ifp == NULL)
@@ -602,6 +628,7 @@ int vboxNetFltOsInitInstance(PVBOXNETFLT
pThis->pSwitchPort->pfnReportNoPreemptDsts(pThis->pSwitchPort, 0 /* none */);
vboxNetFltRelease(pThis, true /*fBusy*/);
}
+ VBOXCURVNET_RESTORE();
return VINF_SUCCESS;
}
@@ -611,6 +638,7 @@ bool vboxNetFltOsMaybeRediscovered(PVBOX
struct ifnet *ifp, *ifp0;
ifp = (struct ifnet *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);
+ VBOXCURVNET_SET(ifp->if_vnet);
/*
* Attempt to check if the interface is still there and re-initialize if
* something has changed.
@@ -628,6 +656,7 @@ bool vboxNetFltOsMaybeRediscovered(PVBOX
vboxNetFltOsDeleteInstance(pThis);
vboxNetFltOsInitInstance(pThis, NULL);
}
+ VBOXCURVNET_RESTORE()
return !ASMAtomicUoReadBool(&pThis->fDisconnectedFromHost);
}
@@ -669,6 +698,7 @@ void vboxNetFltPortOsSetActive(PVBOXNETF
Log(("%s: fActive:%d\n", __func__, fActive));
ifp = (struct ifnet *)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.ifp);
+ VBOXCURVNET_SET(ifp->if_vnet);
node = (node_p)ASMAtomicUoReadPtr((void * volatile *)&pThis->u.s.node);
memset(&ifreq, 0, sizeof(struct ifreq));
@@ -742,6 +772,7 @@ void vboxNetFltPortOsSetActive(PVBOXNETF
strlcpy(rm->ourhook, "output", NG_HOOKSIZ);
NG_SEND_MSG_PATH(error, node, msg, path, 0);
}
+ VBOXCURVNET_RESTORE();
}
int vboxNetFltOsDisconnectIt(PVBOXNETFLTINS pThis)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86aainkbhb.fsf>
