From: Sasha Levin <levinsasha928@gmail.com>
To: qemu-devel@nongnu.org
Cc: swoop3r@gmx.de, Anthony Liguori <aliguori@us.ibm.com>,
Sasha Levin <levinsasha928@gmail.com>
Subject: [Qemu-devel] [PATCH] tap: Add optional parameters to up/down script
Date: Thu, 29 Sep 2011 16:57:40 +0300 [thread overview]
Message-ID: <1317304660-18072-1-git-send-email-levinsasha928@gmail.com> (raw)
This allows the user to add custom parameters to the up or down
scripts.
Cc: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
---
net.c | 8 ++++++++
net/tap.c | 37 ++++++++++++++++++++++++++++++-------
2 files changed, 38 insertions(+), 7 deletions(-)
diff --git a/net.c b/net.c
index d05930c..bb27598 100644
--- a/net.c
+++ b/net.c
@@ -952,10 +952,18 @@ static const struct {
.type = QEMU_OPT_STRING,
.help = "script to initialize the interface",
}, {
+ .name = "scriptparams",
+ .type = QEMU_OPT_STRING,
+ .help = "parameters for the initialization script",
+ }, {
.name = "downscript",
.type = QEMU_OPT_STRING,
.help = "script to shut down the interface",
}, {
+ .name = "downscriptparams",
+ .type = QEMU_OPT_STRING,
+ .help = "parameters for the deinitialization script",
+ }, {
.name = "sndbuf",
.type = QEMU_OPT_SIZE,
.help = "send buffer limit"
diff --git a/net/tap.c b/net/tap.c
index 1f26dc9..5a9141e 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -52,7 +52,7 @@ typedef struct TAPState {
VLANClientState nc;
int fd;
char down_script[1024];
- char down_script_arg[128];
+ char down_script_arg[1024];
uint8_t buf[TAP_BUFSIZE];
unsigned int read_poll : 1;
unsigned int write_poll : 1;
@@ -392,7 +392,8 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
{
int fd, vnet_hdr_required;
char ifname[128] = {0,};
- const char *setup_script;
+ const char *setup_script, *setup_script_params;
+ char setup_script_formatted[1024];
if (qemu_opt_get(opts, "ifname")) {
pstrcpy(ifname, sizeof(ifname), qemu_opt_get(opts, "ifname"));
@@ -411,10 +412,16 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
}
setup_script = qemu_opt_get(opts, "script");
+ setup_script_params = qemu_opt_get(opts, "scriptparams");
+ if (setup_script_params == NULL)
+ setup_script_params = "";
+
+ snprintf(setup_script_formatted, sizeof(setup_script_formatted),
+ "%s %s", ifname, setup_script_params);
if (setup_script &&
setup_script[0] != '\0' &&
strcmp(setup_script, "no") != 0 &&
- launch_script(setup_script, ifname, fd)) {
+ launch_script(setup_script, setup_script_formatted, fd)) {
close(fd);
return -1;
}
@@ -432,9 +439,12 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
if (qemu_opt_get(opts, "fd")) {
if (qemu_opt_get(opts, "ifname") ||
qemu_opt_get(opts, "script") ||
+ qemu_opt_get(opts, "scriptparams") ||
qemu_opt_get(opts, "downscript") ||
+ qemu_opt_get(opts, "downscriptparams") ||
qemu_opt_get(opts, "vnet_hdr")) {
- error_report("ifname=, script=, downscript= and vnet_hdr= is invalid with fd=");
+ error_report("ifname=, script=, downscript=, scriptparams=, "
+ "downscriptparams= and vnet_hdr= is invalid with fd=");
return -1;
}
@@ -455,6 +465,14 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
qemu_opt_set(opts, "downscript", DEFAULT_NETWORK_DOWN_SCRIPT);
}
+ if (!qemu_opt_get(opts, "scriptparams")) {
+ qemu_opt_set(opts, "scriptparams", "");
+ }
+
+ if (!qemu_opt_get(opts, "downscriptparams")) {
+ qemu_opt_set(opts, "downscriptparams", "");
+ }
+
fd = net_tap_init(opts, &vnet_hdr);
if (fd == -1) {
return -1;
@@ -475,18 +493,23 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=%d", fd);
} else {
const char *ifname, *script, *downscript;
+ const char *scriptparams, *downscriptparams;
ifname = qemu_opt_get(opts, "ifname");
script = qemu_opt_get(opts, "script");
downscript = qemu_opt_get(opts, "downscript");
+ scriptparams = qemu_opt_get(opts, "scriptparams");
+ downscriptparams = qemu_opt_get(opts, "downscriptparams");
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
- "ifname=%s,script=%s,downscript=%s",
- ifname, script, downscript);
+ "ifname=%s,script=%s,scriptparams=%s,downscript=%s,"
+ "downscriptparams=%s", ifname, script, scriptparams,
+ downscript, downscriptparams);
if (strcmp(downscript, "no") != 0) {
snprintf(s->down_script, sizeof(s->down_script), "%s", downscript);
- snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s", ifname);
+ snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s %s", ifname,
+ downscriptparams);
}
}
--
1.7.6.1
next reply other threads:[~2011-09-29 13:58 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-29 13:57 Sasha Levin [this message]
2011-09-29 14:10 ` [Qemu-devel] [PATCH] tap: Add optional parameters to up/down script Jan Kiszka
2011-09-29 14:40 ` Thomas Jung
2011-09-29 15:20 ` Jan Kiszka
2011-09-29 15:39 ` Sasha Levin
2011-09-29 14:53 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1317304660-18072-1-git-send-email-levinsasha928@gmail.com \
--to=levinsasha928@gmail.com \
--cc=aliguori@us.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=swoop3r@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).