This allows users to pass a pre-configured fd to use for the network
interface.
For example:
kvm run -n mode=tap,fd=3 3<>/dev/net/tap3
Cc: Daniel P. Berrange <[email protected]>
Cc: Osier Yang <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
tools/kvm/builtin-run.c | 2 ++
tools/kvm/include/kvm/virtio-net.h | 1 +
tools/kvm/virtio/net.c | 6 ++++++
3 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c
index 9148d83..924ae80 100644
--- a/tools/kvm/builtin-run.c
+++ b/tools/kvm/builtin-run.c
@@ -220,6 +220,8 @@ static int set_net_param(struct virtio_net_params *p, const
char *param,
p->host_ip = strdup(val);
} else if (strcmp(param, "vhost") == 0) {
p->vhost = atoi(val);
+ } else if (strcmp(param, "fd") == 0) {
+ p->fd = atoi(val);
}
return 0;
diff --git a/tools/kvm/include/kvm/virtio-net.h
b/tools/kvm/include/kvm/virtio-net.h
index dade8cb..a3219b6 100644
--- a/tools/kvm/include/kvm/virtio-net.h
+++ b/tools/kvm/include/kvm/virtio-net.h
@@ -12,6 +12,7 @@ struct virtio_net_params {
struct kvm *kvm;
int mode;
int vhost;
+ int fd;
};
void virtio_net__init(const struct virtio_net_params *params);
diff --git a/tools/kvm/virtio/net.c b/tools/kvm/virtio/net.c
index 3fb5054..9b93c5d 100644
--- a/tools/kvm/virtio/net.c
+++ b/tools/kvm/virtio/net.c
@@ -178,6 +178,12 @@ static bool virtio_net__tap_init(const struct
virtio_net_params *params,
struct sockaddr_in sin = {0};
struct ifreq ifr;
+ /* Did the user already gave us the FD? */
+ if (params->fd) {
+ ndev->tap_fd = params->fd;
+ return 1;
+ }
+
ndev->tap_fd = open("/dev/net/tun", O_RDWR);
if (ndev->tap_fd < 0) {
pr_warning("Unable to open /dev/net/tun");
--
1.7.8
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html