Add the "vnet" and "-vnet" options, to allow moving interfaces between

jails with VIMAGE.

Approved by:	bz (mentor)
This commit is contained in:
Jamie Gritton 2009-06-24 18:21:37 +00:00
parent 29d08a6da6
commit 5061de23fa
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=194871
4 changed files with 48 additions and 4 deletions

View File

@ -143,7 +143,7 @@ CRUNCH_LIBS+= -lipx
.if ${MK_ZFS} != "no"
CRUNCH_LIBS+= -lzfs -lnvpair -luutil -lavl
.endif
CRUNCH_LIBS+= -lgeom -lbsdxml -lkiconv -lmd -lreadline -lsbuf -lufs -lz
CRUNCH_LIBS+= -lgeom -lbsdxml -ljail -lkiconv -lmd -lreadline -lsbuf -lufs -lz
.if ${MACHINE_ARCH} == "i386"
CRUNCH_PROGS_sbin+= bsdlabel sconfig fdisk

View File

@ -27,8 +27,8 @@ SRCS+= ifgre.c # GRE keys etc
SRCS+= ifgif.c # GIF reversed header workaround
SRCS+= ifieee80211.c regdomain.c # SIOC[GS]IEEE80211 support
DPADD+= ${LIBBSDXML} ${LIBSBUF}
LDADD+= -lbsdxml -lsbuf
DPADD+= ${LIBBSDXML} ${LIBSBUF} ${LIBJAIL}
LDADD+= -lbsdxml -ljail -lsbuf
SRCS+= ifcarp.c # SIOC[GS]VH support
SRCS+= ifgroup.c # ...

View File

@ -28,7 +28,7 @@
.\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94
.\" $FreeBSD$
.\"
.Dd January 7, 2009
.Dd June 24, 2009
.Dt IFCONFIG 8
.Os
.Sh NAME
@ -417,6 +417,18 @@ If the driver offers user-configurable VLAN support, disable
reception of extended frames, tag processing in hardware, or
frame filtering in hardware,
respectively.
.It Cm vnet Ar jail
Move the interface to the
.Xr jail 8 ,
specified by name or JID.
If the jail has a virtual network stack, the interface will disappear
from the current environment and become visible to the jail.
.It Fl vnet Ar jail
Reclaim the interface from the
.Xr jail 8 ,
specified by name or JID.
If the jail has a virtual network stack, the interface will disappear
from the jail, and become visible to the current network environment.
.It Cm polling
Turn on
.Xr polling 4
@ -2367,6 +2379,7 @@ tried to alter an interface's configuration.
.\" .Xr eon 5 ,
.Xr rc 8 ,
.Xr routed 8 ,
.Xr jail 8 ,
.Xr sysctl 8
.Sh HISTORY
The

View File

@ -67,6 +67,7 @@ static const char rcsid[] =
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <jail.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -628,6 +629,34 @@ deletetunnel(const char *vname, int param, int s, const struct afswtch *afp)
err(1, "SIOCDIFPHYADDR");
}
static void
setifvnet(const char *jname, int dummy __unused, int s,
const struct afswtch *afp)
{
struct ifreq my_ifr;
memcpy(&my_ifr, &ifr, sizeof(my_ifr));
ifr.ifr_jid = jail_getid(jname);
if (ifr.ifr_jid < 0)
errx(1, "%s", jail_errmsg);
if (ioctl(s, SIOCSIFVNET, &ifr) < 0)
err(1, "SIOCSIFVNET");
}
static void
setifrvnet(const char *jname, int dummy __unused, int s,
const struct afswtch *afp)
{
struct ifreq my_ifr;
memcpy(&my_ifr, &ifr, sizeof(my_ifr));
ifr.ifr_jid = jail_getid(jname);
if (ifr.ifr_jid < 0)
errx(1, "%s", jail_errmsg);
if (ioctl(s, SIOCSIFRVNET, &ifr) < 0)
err(1, "SIOCSIFRVNET");
}
static void
setifnetmask(const char *addr, int dummy __unused, int s,
const struct afswtch *afp)
@ -1012,6 +1041,8 @@ static struct cmd basic_cmds[] = {
DEF_CMD_ARG2("tunnel", settunnel),
DEF_CMD("-tunnel", 0, deletetunnel),
DEF_CMD("deletetunnel", 0, deletetunnel),
DEF_CMD_ARG("vnet", setifvnet),
DEF_CMD_ARG("-vnet", setifrvnet),
DEF_CMD("link0", IFF_LINK0, setifflags),
DEF_CMD("-link0", -IFF_LINK0, setifflags),
DEF_CMD("link1", IFF_LINK1, setifflags),