diff options
author | Jason Wang <jasowang@redhat.com> | 2013-01-30 19:12:34 +0800 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2013-02-01 11:03:02 -0600 |
commit | 264986e2c8f14a0f4a32ac6f1e083905833a5fc7 (patch) | |
tree | b109c87bb400c12501553ed966607e33a9050e75 /net/tap_int.h | |
parent | e5dc0b402e64d245956c47cf22776e5206f322dc (diff) | |
download | qemu-264986e2c8f14a0f4a32ac6f1e083905833a5fc7.zip qemu-264986e2c8f14a0f4a32ac6f1e083905833a5fc7.tar.gz qemu-264986e2c8f14a0f4a32ac6f1e083905833a5fc7.tar.bz2 |
tap: multiqueue support
Recently, linux support multiqueue tap which could let userspace call TUNSETIFF
for a signle device many times to create multiple file descriptors as
independent queues. User could also enable/disabe a specific queue through
TUNSETQUEUE.
The patch adds the generic infrastructure to create multiqueue taps. To achieve
this a new parameter "queues" were introduced to specify how many queues were
expected to be created for tap by qemu itself. Alternatively, management could
also pass multiple pre-created tap file descriptors separated with ':' through a
new parameter fds like -netdev tap,id=hn0,fds="X:Y:..:Z". Multiple vhost file
descriptors could also be passed in this way.
Each TAPState were still associated to a tap fd, which mean multiple TAPStates
were created when user needs multiqueue taps. Since each TAPState contains one
NetClientState, with the multiqueue nic support, an N peers of NetClientState
were built up.
A new parameter, mq_required were introduce in tap_open() to create multiqueue
tap fds.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'net/tap_int.h')
-rw-r--r-- | net/tap_int.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/tap_int.h b/net/tap_int.h index 125f83d..86bb224 100644 --- a/net/tap_int.h +++ b/net/tap_int.h @@ -32,7 +32,8 @@ #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup" #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown" -int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required); +int tap_open(char *ifname, int ifname_size, int *vnet_hdr, + int vnet_hdr_required, int mq_required); ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen); |