virtio-net,tap: use standard-headers
Drop duplicated code. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									907eb3e5b6
								
							
						
					
					
						commit
						b93a5ba3d1
					
				| @ -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 | ||||
|  * | ||||
|  | ||||
| @ -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 */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Michael S. Tsirkin
						Michael S. Tsirkin