On Mon, 16 Feb 2015 22:36:09 +0100 "Michael S. Tsirkin" <m...@redhat.com> wrote:
> Drop duplicated code. > > Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > --- > include/hw/virtio/virtio-net.h | 151 > +---------------------------------------- > include/net/tap.h | 24 +------ > 2 files changed, 2 insertions(+), 173 deletions(-) > > diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h > index 6ceb5aa..4c2fe83 100644 > --- a/include/hw/virtio/virtio-net.h > +++ b/include/hw/virtio/virtio-net.h > @@ -14,49 +14,15 @@ > #ifndef _QEMU_VIRTIO_NET_H > #define _QEMU_VIRTIO_NET_H > > +#include "standard-headers/linux/virtio_net.h" > #include "hw/virtio/virtio.h" > -#include "hw/pci/pci.h" > > #define TYPE_VIRTIO_NET "virtio-net-device" > #define VIRTIO_NET(obj) \ > OBJECT_CHECK(VirtIONet, (obj), TYPE_VIRTIO_NET) > > -#define ETH_ALEN 6 > - > -/* from Linux's virtio_net.h */ > - > -/* The ID for virtio_net */ > -#define VIRTIO_ID_NET 1 > - > -/* The feature bitmap for virtio net */ > -#define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum > */ > -#define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial > csum */ > #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 /* Control channel offload > * configuration support */ > -#define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ > -#define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type > */ > -#define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ > -#define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ > -#define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN > in. */ > -#define VIRTIO_NET_F_GUEST_UFO 10 /* Guest can handle UFO in. */ > -#define VIRTIO_NET_F_HOST_TSO4 11 /* Host can handle TSOv4 in. */ > -#define VIRTIO_NET_F_HOST_TSO6 12 /* Host can handle TSOv6 in. */ > -#define VIRTIO_NET_F_HOST_ECN 13 /* Host can handle TSO[6] w/ ECN in. > */ > -#define VIRTIO_NET_F_HOST_UFO 14 /* Host can handle UFO in. */ > -#define VIRTIO_NET_F_MRG_RXBUF 15 /* Host can merge receive buffers. */ > -#define VIRTIO_NET_F_STATUS 16 /* virtio_net_config.status > available */ > -#define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ > -#define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ > -#define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ > -#define VIRTIO_NET_F_CTRL_RX_EXTRA 20 /* Extra RX mode control support */ > -#define VIRTIO_NET_F_GUEST_ANNOUNCE 21 /* Guest can announce itself */ > -#define VIRTIO_NET_F_MQ 22 /* Device supports Receive Flow > - * Steering */ > - > -#define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ > - > -#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ > -#define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ > > #define TX_TIMER_INTERVAL 150000 /* 150 us */ > > @@ -77,72 +43,6 @@ typedef struct virtio_net_conf > /* Maximum packet size we can receive from tap device: header + 64k */ > #define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10)) > > -struct virtio_net_config > -{ > - /* The config defining mac address ($ETH_ALEN bytes) */ > - uint8_t mac[ETH_ALEN]; > - /* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */ > - uint16_t status; > - /* Max virtqueue pairs supported by the device */ > - uint16_t max_virtqueue_pairs; > -} QEMU_PACKED; > - > -/* > - * Control virtqueue data structures > - * > - * The control virtqueue expects a header in the first sg entry > - * and an ack/status response in the last entry. Data for the > - * command goes in between. > - */ > -struct virtio_net_ctrl_hdr { > - uint8_t class; > - uint8_t cmd; > -}; > - > -typedef uint8_t virtio_net_ctrl_ack; > - > -#define VIRTIO_NET_OK 0 > -#define VIRTIO_NET_ERR 1 > - > -/* > - * Control the RX mode, ie. promisucous, allmulti, etc... > - * All commands require an "out" sg entry containing a 1 byte > - * state value, zero = disable, non-zero = enable. Commands > - * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature. > - * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA. > - */ > -#define VIRTIO_NET_CTRL_RX 0 > - #define VIRTIO_NET_CTRL_RX_PROMISC 0 > - #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 > - #define VIRTIO_NET_CTRL_RX_ALLUNI 2 > - #define VIRTIO_NET_CTRL_RX_NOMULTI 3 > - #define VIRTIO_NET_CTRL_RX_NOUNI 4 > - #define VIRTIO_NET_CTRL_RX_NOBCAST 5 > - > -/* > - * Control the MAC > - * > - * The MAC filter table is managed by the hypervisor, the guest should > - * assume the size is infinite. Filtering should be considered > - * non-perfect, ie. based on hypervisor resources, the guest may > - * received packets from sources not specified in the filter list. > - * > - * In addition to the class/cmd header, the TABLE_SET command requires > - * two out scatterlists. Each contains a 4 byte count of entries followed > - * by a concatenated byte stream of the ETH_ALEN MAC addresses. The > - * first sg list contains unicast addresses, the second is for multicast. > - * This functionality is present if the VIRTIO_NET_F_CTRL_RX feature > - * is available. > - * > - * The ADDR_SET command requests one out scatterlist, it contains a > - * 6 bytes MAC address. This functionality is present if the > - * VIRTIO_NET_F_CTRL_MAC_ADDR feature is available. > - */ > -struct virtio_net_ctrl_mac { > - uint32_t entries; > - uint8_t macs[][ETH_ALEN]; > -}; > - > typedef struct VirtIONetQueue { > VirtQueue *rx_vq; > VirtQueue *tx_vq; > @@ -199,55 +99,6 @@ typedef struct VirtIONet { > int announce_counter; > } VirtIONet; > > -#define VIRTIO_NET_CTRL_MAC 1 > - #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0 > - #define VIRTIO_NET_CTRL_MAC_ADDR_SET 1 > - > -/* > - * Control VLAN filtering > - * > - * The VLAN filter table is controlled via a simple ADD/DEL interface. > - * VLAN IDs not added may be filterd by the hypervisor. Del is the > - * opposite of add. Both commands expect an out entry containing a 2 > - * byte VLAN ID. VLAN filterting is available with the > - * VIRTIO_NET_F_CTRL_VLAN feature bit. > - */ > -#define VIRTIO_NET_CTRL_VLAN 2 > - #define VIRTIO_NET_CTRL_VLAN_ADD 0 > - #define VIRTIO_NET_CTRL_VLAN_DEL 1 > - > -/* > - * Control link announce acknowledgement > - * > - * VIRTIO_NET_S_ANNOUNCE bit in the status field requests link announcement > from > - * guest driver. The driver is notified by config space change interrupt. > The > - * command VIRTIO_NET_CTRL_ANNOUNCE_ACK is used to indicate that the driver > has > - * received the notification. It makes the device clear the bit > - * VIRTIO_NET_S_ANNOUNCE in the status field. > - */ > -#define VIRTIO_NET_CTRL_ANNOUNCE 3 > - #define VIRTIO_NET_CTRL_ANNOUNCE_ACK 0 > - > -/* > - * Control Multiqueue > - * > - * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET > - * enables multiqueue, specifying the number of the transmit and > - * receive queues that will be used. After the command is consumed and acked > by > - * the device, the device will not steer new packets on receive virtqueues > - * other than specified nor read from transmit virtqueues other than > specified. > - * Accordingly, driver should not transmit new packets on virtqueues other > than > - * specified. > - */ > -struct virtio_net_ctrl_mq { > - uint16_t virtqueue_pairs; > -}; > - > -#define VIRTIO_NET_CTRL_MQ 4 > - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0 > - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1 > - #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000 > - > /* > * Control network offloads > * > diff --git a/include/net/tap.h b/include/net/tap.h > index 6daeb42..5da4edc 100644 > --- a/include/net/tap.h > +++ b/include/net/tap.h > @@ -28,6 +28,7 @@ > > #include "qemu-common.h" > #include "qapi-types.h" > +#include "standard-headers/linux/virtio_net.h" > > int tap_enable(NetClientState *nc); > int tap_disable(NetClientState *nc); > @@ -37,27 +38,4 @@ int tap_get_fd(NetClientState *nc); > struct vhost_net; > struct vhost_net *tap_get_vhost_net(NetClientState *nc); > > -struct virtio_net_hdr > -{ > -#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, > csum_offset > -#define VIRTIO_NET_HDR_F_DATA_VALID 2 // Csum is valid > - uint8_t flags; > -#define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame > -#define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) > -#define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) > -#define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP > -#define VIRTIO_NET_HDR_GSO_ECN 0x80 // TCP has ECN set > - uint8_t gso_type; > - uint16_t hdr_len; > - uint16_t gso_size; > - uint16_t csum_start; > - uint16_t csum_offset; > -}; > - > -struct virtio_net_hdr_mrg_rxbuf > -{ > - struct virtio_net_hdr hdr; > - uint16_t num_buffers; /* Number of merged rx buffers */ > -}; > - > #endif /* QEMU_NET_TAP_H */ Reviewed-by: Thomas Huth <th...@linux.vnet.ibm.com>