root / hw / virtio-net.h @ 5703c174
History | View | Annotate | Download (3 kB)
1 |
/*
|
---|---|
2 |
* Virtio Network Device
|
3 |
*
|
4 |
* Copyright IBM, Corp. 2007
|
5 |
*
|
6 |
* Authors:
|
7 |
* Anthony Liguori <aliguori@us.ibm.com>
|
8 |
*
|
9 |
* This work is licensed under the terms of the GNU GPL, version 2. See
|
10 |
* the COPYING file in the top-level directory.
|
11 |
*
|
12 |
*/
|
13 |
|
14 |
#ifndef _QEMU_VIRTIO_NET_H
|
15 |
#define _QEMU_VIRTIO_NET_H
|
16 |
|
17 |
#include "virtio.h" |
18 |
#include "net.h" |
19 |
#include "pci.h" |
20 |
|
21 |
/* from Linux's virtio_net.h */
|
22 |
|
23 |
/* The ID for virtio_net */
|
24 |
#define VIRTIO_ID_NET 1 |
25 |
|
26 |
/* The feature bitmap for virtio net */
|
27 |
#define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ |
28 |
#define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ |
29 |
#define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ |
30 |
#define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ |
31 |
#define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ |
32 |
#define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ |
33 |
#define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN in. */ |
34 |
#define VIRTIO_NET_F_GUEST_UFO 10 /* Guest can handle UFO in. */ |
35 |
#define VIRTIO_NET_F_HOST_TSO4 11 /* Host can handle TSOv4 in. */ |
36 |
#define VIRTIO_NET_F_HOST_TSO6 12 /* Host can handle TSOv6 in. */ |
37 |
#define VIRTIO_NET_F_HOST_ECN 13 /* Host can handle TSO[6] w/ ECN in. */ |
38 |
#define VIRTIO_NET_F_HOST_UFO 14 /* Host can handle UFO in. */ |
39 |
#define VIRTIO_NET_F_MRG_RXBUF 15 /* Host can merge receive buffers. */ |
40 |
#define VIRTIO_NET_F_STATUS 16 /* virtio_net_config.status available */ |
41 |
|
42 |
#define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
43 |
|
44 |
#define TX_TIMER_INTERVAL 150000 /* 150 us */ |
45 |
|
46 |
/* Maximum packet size we can receive from tap device: header + 64k */
|
47 |
#define VIRTIO_NET_MAX_BUFSIZE (sizeof(struct virtio_net_hdr) + (64 << 10)) |
48 |
|
49 |
struct virtio_net_config
|
50 |
{ |
51 |
/* The config defining mac address (6 bytes) */
|
52 |
uint8_t mac[6];
|
53 |
/* See VIRTIO_NET_F_STATUS and VIRTIO_NET_S_* above */
|
54 |
uint16_t status; |
55 |
} __attribute__((packed)); |
56 |
|
57 |
/* This is the first element of the scatter-gather list. If you don't
|
58 |
* specify GSO or CSUM features, you can simply ignore the header. */
|
59 |
struct virtio_net_hdr
|
60 |
{ |
61 |
#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset |
62 |
uint8_t flags; |
63 |
#define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame |
64 |
#define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) |
65 |
#define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) |
66 |
#define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP |
67 |
#define VIRTIO_NET_HDR_GSO_ECN 0x80 // TCP has ECN set |
68 |
uint8_t gso_type; |
69 |
uint16_t hdr_len; |
70 |
uint16_t gso_size; |
71 |
uint16_t csum_start; |
72 |
uint16_t csum_offset; |
73 |
}; |
74 |
|
75 |
/* This is the version of the header to use when the MRG_RXBUF
|
76 |
* feature has been negotiated. */
|
77 |
struct virtio_net_hdr_mrg_rxbuf
|
78 |
{ |
79 |
struct virtio_net_hdr hdr;
|
80 |
uint16_t num_buffers; /* Number of merged rx buffers */
|
81 |
}; |
82 |
|
83 |
void virtio_net_init(PCIBus *bus, NICInfo *nd, int devfn); |
84 |
|
85 |
#endif
|