diff options
Diffstat (limited to 'include/uapi/linux/virtio_net.h')
-rw-r--r-- | include/uapi/linux/virtio_net.h | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index b5f1677b291c..7bbee79ca293 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h | |||
@@ -35,7 +35,6 @@ | |||
35 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ | 35 | #define VIRTIO_NET_F_CSUM 0 /* Host handles pkts w/ partial csum */ |
36 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ | 36 | #define VIRTIO_NET_F_GUEST_CSUM 1 /* Guest handles pkts w/ partial csum */ |
37 | #define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ | 37 | #define VIRTIO_NET_F_MAC 5 /* Host has given MAC address. */ |
38 | #define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ | ||
39 | #define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ | 38 | #define VIRTIO_NET_F_GUEST_TSO4 7 /* Guest can handle TSOv4 in. */ |
40 | #define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ | 39 | #define VIRTIO_NET_F_GUEST_TSO6 8 /* Guest can handle TSOv6 in. */ |
41 | #define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN in. */ | 40 | #define VIRTIO_NET_F_GUEST_ECN 9 /* Guest can handle TSO[6] w/ ECN in. */ |
@@ -56,6 +55,10 @@ | |||
56 | * Steering */ | 55 | * Steering */ |
57 | #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ | 56 | #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ |
58 | 57 | ||
58 | #ifndef VIRTIO_NET_NO_LEGACY | ||
59 | #define VIRTIO_NET_F_GSO 6 /* Host handles pkts w/ any GSO type */ | ||
60 | #endif /* VIRTIO_NET_NO_LEGACY */ | ||
61 | |||
59 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ | 62 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
60 | #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ | 63 | #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ |
61 | 64 | ||
@@ -71,19 +74,39 @@ struct virtio_net_config { | |||
71 | __u16 max_virtqueue_pairs; | 74 | __u16 max_virtqueue_pairs; |
72 | } __attribute__((packed)); | 75 | } __attribute__((packed)); |
73 | 76 | ||
77 | /* | ||
78 | * This header comes first in the scatter-gather list. If you don't | ||
79 | * specify GSO or CSUM features, you can simply ignore the header. | ||
80 | * | ||
81 | * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf, | ||
82 | * only flattened. | ||
83 | */ | ||
84 | struct virtio_net_hdr_v1 { | ||
85 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 /* Use csum_start, csum_offset */ | ||
86 | #define VIRTIO_NET_HDR_F_DATA_VALID 2 /* Csum is valid */ | ||
87 | __u8 flags; | ||
88 | #define VIRTIO_NET_HDR_GSO_NONE 0 /* Not a GSO frame */ | ||
89 | #define VIRTIO_NET_HDR_GSO_TCPV4 1 /* GSO frame, IPv4 TCP (TSO) */ | ||
90 | #define VIRTIO_NET_HDR_GSO_UDP 3 /* GSO frame, IPv4 UDP (UFO) */ | ||
91 | #define VIRTIO_NET_HDR_GSO_TCPV6 4 /* GSO frame, IPv6 TCP */ | ||
92 | #define VIRTIO_NET_HDR_GSO_ECN 0x80 /* TCP has ECN set */ | ||
93 | __u8 gso_type; | ||
94 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ | ||
95 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ | ||
96 | __virtio16 csum_start; /* Position to start checksumming from */ | ||
97 | __virtio16 csum_offset; /* Offset after that to place checksum */ | ||
98 | __virtio16 num_buffers; /* Number of merged rx buffers */ | ||
99 | }; | ||
100 | |||
101 | #ifndef VIRTIO_NET_NO_LEGACY | ||
74 | /* This header comes first in the scatter-gather list. | 102 | /* This header comes first in the scatter-gather list. |
75 | * If VIRTIO_F_ANY_LAYOUT is not negotiated, it must | 103 | * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must |
76 | * be the first element of the scatter-gather list. If you don't | 104 | * be the first element of the scatter-gather list. If you don't |
77 | * specify GSO or CSUM features, you can simply ignore the header. */ | 105 | * specify GSO or CSUM features, you can simply ignore the header. */ |
78 | struct virtio_net_hdr { | 106 | struct virtio_net_hdr { |
79 | #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset | 107 | /* See VIRTIO_NET_HDR_F_* */ |
80 | #define VIRTIO_NET_HDR_F_DATA_VALID 2 // Csum is valid | ||
81 | __u8 flags; | 108 | __u8 flags; |
82 | #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame | 109 | /* See VIRTIO_NET_HDR_GSO_* */ |
83 | #define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) | ||
84 | #define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) | ||
85 | #define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP | ||
86 | #define VIRTIO_NET_HDR_GSO_ECN 0x80 // TCP has ECN set | ||
87 | __u8 gso_type; | 110 | __u8 gso_type; |
88 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ | 111 | __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ |
89 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ | 112 | __virtio16 gso_size; /* Bytes to append to hdr_len per frame */ |
@@ -97,6 +120,7 @@ struct virtio_net_hdr_mrg_rxbuf { | |||
97 | struct virtio_net_hdr hdr; | 120 | struct virtio_net_hdr hdr; |
98 | __virtio16 num_buffers; /* Number of merged rx buffers */ | 121 | __virtio16 num_buffers; /* Number of merged rx buffers */ |
99 | }; | 122 | }; |
123 | #endif /* ...VIRTIO_NET_NO_LEGACY */ | ||
100 | 124 | ||
101 | /* | 125 | /* |
102 | * Control virtqueue data structures | 126 | * Control virtqueue data structures |