summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorjamie <jamie@FreeBSD.org>2009-06-24 18:21:37 +0000
committerjamie <jamie@FreeBSD.org>2009-06-24 18:21:37 +0000
commit17732421076935a7d2072f52c7a30754ed31f34b (patch)
tree64fae747524b876a567b23c9085d45d1c3982f56 /sbin
parentc6535b4fd4e8f344a50494d0f7bde4929bcbe834 (diff)
downloadFreeBSD-src-17732421076935a7d2072f52c7a30754ed31f34b.zip
FreeBSD-src-17732421076935a7d2072f52c7a30754ed31f34b.tar.gz
Add the "vnet" and "-vnet" options, to allow moving interfaces between
jails with VIMAGE. Approved by: bz (mentor)
Diffstat (limited to 'sbin')
-rw-r--r--sbin/ifconfig/Makefile4
-rw-r--r--sbin/ifconfig/ifconfig.815
-rw-r--r--sbin/ifconfig/ifconfig.c31
3 files changed, 47 insertions, 3 deletions
diff --git a/sbin/ifconfig/Makefile b/sbin/ifconfig/Makefile
index c97f14d..e5b78af 100644
--- a/sbin/ifconfig/Makefile
+++ b/sbin/ifconfig/Makefile
@@ -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 # ...
diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8
index d27bed8..5f571f8 100644
--- a/sbin/ifconfig/ifconfig.8
+++ b/sbin/ifconfig/ifconfig.8
@@ -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
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index b90adf0..12c64d6 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -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>
@@ -629,6 +630,34 @@ deletetunnel(const char *vname, int param, int s, const struct afswtch *afp)
}
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),
OpenPOWER on IntegriCloud