On 12/21/2014 12:48 AM, Roy Vardi wrote: > From: Roy Vardi <r...@ezchip.com> > > Add 'persistent' boolean flag to -net tap option. > When set to off - tap interface will be released on shutdown > When set to on\not specified - tap interface will remain > > Running with -net tap,persistent=off will force the tap interface > down when qemu goes down, thus ensuring that there're no zombie tap
s/there're/there are/ > interfaces left > > This is achieved using another ioctl > > Note: This commit includes the above support only for linux systems > > Signed-off-by: Roy Vardi <r...@ezchip.com> > --- > #define PATH_NET_TUN "/dev/net/tun" > > int tap_open(char *ifname, int ifname_size, int *vnet_hdr, > - int vnet_hdr_required, int mq_required) > + int vnet_hdr_required, int mq_required, int persistent_required) Used as a boolean, so s/int/bool/ > { > struct ifreq ifr; > int fd, ret; > @@ -109,6 +110,17 @@ int tap_open(char *ifname, int ifname_size, int > *vnet_hdr, > close(fd); > return -1; > } > + > + if (!persistent_required) { > + ret = ioctl(fd, TUNSETPERSIST, 0); > + if (ret != 0) { > + error_report("could not configure non-persistent %s (%s): %m", %m is not portable to non-glibc (then again, this file is Linux-only). > +++ b/net/tap.c > @@ -556,7 +556,8 @@ int net_init_bridge(const NetClientOptions *opts, const > char *name, > > static int net_tap_init(const NetdevTapOptions *tap, int *vnet_hdr, > const char *setup_script, char *ifname, > - size_t ifname_sz, int mq_required) > + size_t ifname_sz, int mq_required, > + int persistent_required) Again, prefer bool. > @@ -688,7 +689,7 @@ int net_init_tap(const NetClientOptions *opts, const char > *name, > NetClientState *peer) > { > const NetdevTapOptions *tap; > - int fd, vnet_hdr = 0, i = 0, queues; > + int fd, vnet_hdr = 0, i = 0, queues, persistent; Use bool. > /* for the no-fd, no-helper case */ > const char *script = NULL; /* suppress wrong "uninit'd use" gcc warning > */ > const char *downscript = NULL; > @@ -699,6 +700,7 @@ int net_init_tap(const NetClientOptions *opts, const char > *name, > tap = opts->tap; > queues = tap->has_queues ? tap->queues : 1; > vhostfdname = tap->has_vhostfd ? tap->vhostfd : NULL; > + persistent = tap->has_persistent ? tap->persistent : 1; s/1/true/ > +++ b/qapi-schema.json > @@ -2007,6 +2007,8 @@ > # > # @queues: #optional number of queues to be created for multiqueue capable > tap > # > +# @persistent: #optional for opening tap in persistent mode (default: on) > (Since: 2.3) Long line; please wrap at 80 columns. In QMP, the default is 'true', not 'on' (the command line parser maps multiple strings including 'on' into the single QMP bool type). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature