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 <berrange@xxxxxxxxxx> Cc: Osier Yang <jyang@xxxxxxxxxx> Signed-off-by: Sasha Levin <levinsasha928@xxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html