1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef _UAPI_LINUX_VIRTIO_NET_H 8 #define _UAPI_LINUX_VIRTIO_NET_H 9 #include <linux/types.h> 10 #include <linux/virtio_ids.h> 11 #include <linux/virtio_config.h> 12 #include <linux/virtio_types.h> 13 #include <linux/if_ether.h> 14 #define VIRTIO_NET_F_CSUM 0 15 #define VIRTIO_NET_F_GUEST_CSUM 1 16 #define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS 2 17 #define VIRTIO_NET_F_MTU 3 18 #define VIRTIO_NET_F_MAC 5 19 #define VIRTIO_NET_F_GUEST_TSO4 7 20 #define VIRTIO_NET_F_GUEST_TSO6 8 21 #define VIRTIO_NET_F_GUEST_ECN 9 22 #define VIRTIO_NET_F_GUEST_UFO 10 23 #define VIRTIO_NET_F_HOST_TSO4 11 24 #define VIRTIO_NET_F_HOST_TSO6 12 25 #define VIRTIO_NET_F_HOST_ECN 13 26 #define VIRTIO_NET_F_HOST_UFO 14 27 #define VIRTIO_NET_F_MRG_RXBUF 15 28 #define VIRTIO_NET_F_STATUS 16 29 #define VIRTIO_NET_F_CTRL_VQ 17 30 #define VIRTIO_NET_F_CTRL_RX 18 31 #define VIRTIO_NET_F_CTRL_VLAN 19 32 #define VIRTIO_NET_F_CTRL_RX_EXTRA 20 33 #define VIRTIO_NET_F_GUEST_ANNOUNCE 21 34 #define VIRTIO_NET_F_MQ 22 35 #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 36 #define VIRTIO_NET_F_DEVICE_STATS 50 37 #define VIRTIO_NET_F_VQ_NOTF_COAL 52 38 #define VIRTIO_NET_F_NOTF_COAL 53 39 #define VIRTIO_NET_F_GUEST_USO4 54 40 #define VIRTIO_NET_F_GUEST_USO6 55 41 #define VIRTIO_NET_F_HOST_USO 56 42 #define VIRTIO_NET_F_HASH_REPORT 57 43 #define VIRTIO_NET_F_GUEST_HDRLEN 59 44 #define VIRTIO_NET_F_RSS 60 45 #define VIRTIO_NET_F_RSC_EXT 61 46 #define VIRTIO_NET_F_STANDBY 62 47 #define VIRTIO_NET_F_SPEED_DUPLEX 63 48 #ifndef VIRTIO_NET_NO_LEGACY 49 #define VIRTIO_NET_F_GSO 6 50 #endif 51 #define VIRTIO_NET_S_LINK_UP 1 52 #define VIRTIO_NET_S_ANNOUNCE 2 53 #define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0) 54 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1) 55 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2) 56 #define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3) 57 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4) 58 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5) 59 #define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6) 60 #define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX (1 << 7) 61 #define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX (1 << 8) 62 struct virtio_net_config { 63 __u8 mac[ETH_ALEN]; 64 __virtio16 status; 65 __virtio16 max_virtqueue_pairs; 66 __virtio16 mtu; 67 __le32 speed; 68 __u8 duplex; 69 __u8 rss_max_key_size; 70 __le16 rss_max_indirection_table_length; 71 __le32 supported_hash_types; 72 } __attribute__((packed)); 73 struct virtio_net_hdr_v1 { 74 #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 75 #define VIRTIO_NET_HDR_F_DATA_VALID 2 76 #define VIRTIO_NET_HDR_F_RSC_INFO 4 77 __u8 flags; 78 #define VIRTIO_NET_HDR_GSO_NONE 0 79 #define VIRTIO_NET_HDR_GSO_TCPV4 1 80 #define VIRTIO_NET_HDR_GSO_UDP 3 81 #define VIRTIO_NET_HDR_GSO_TCPV6 4 82 #define VIRTIO_NET_HDR_GSO_UDP_L4 5 83 #define VIRTIO_NET_HDR_GSO_ECN 0x80 84 __u8 gso_type; 85 __virtio16 hdr_len; 86 __virtio16 gso_size; 87 union { 88 struct { 89 __virtio16 csum_start; 90 __virtio16 csum_offset; 91 }; 92 struct { 93 __virtio16 start; 94 __virtio16 offset; 95 } csum; 96 struct { 97 __le16 segments; 98 __le16 dup_acks; 99 } rsc; 100 }; 101 __virtio16 num_buffers; 102 }; 103 struct virtio_net_hdr_v1_hash { 104 struct virtio_net_hdr_v1 hdr; 105 __le32 hash_value; 106 #define VIRTIO_NET_HASH_REPORT_NONE 0 107 #define VIRTIO_NET_HASH_REPORT_IPv4 1 108 #define VIRTIO_NET_HASH_REPORT_TCPv4 2 109 #define VIRTIO_NET_HASH_REPORT_UDPv4 3 110 #define VIRTIO_NET_HASH_REPORT_IPv6 4 111 #define VIRTIO_NET_HASH_REPORT_TCPv6 5 112 #define VIRTIO_NET_HASH_REPORT_UDPv6 6 113 #define VIRTIO_NET_HASH_REPORT_IPv6_EX 7 114 #define VIRTIO_NET_HASH_REPORT_TCPv6_EX 8 115 #define VIRTIO_NET_HASH_REPORT_UDPv6_EX 9 116 __le16 hash_report; 117 __le16 padding; 118 }; 119 #ifndef VIRTIO_NET_NO_LEGACY 120 struct virtio_net_hdr { 121 __u8 flags; 122 __u8 gso_type; 123 __virtio16 hdr_len; 124 __virtio16 gso_size; 125 __virtio16 csum_start; 126 __virtio16 csum_offset; 127 }; 128 struct virtio_net_hdr_mrg_rxbuf { 129 struct virtio_net_hdr hdr; 130 __virtio16 num_buffers; 131 }; 132 #endif 133 struct virtio_net_ctrl_hdr { 134 __u8 __linux_class; 135 __u8 cmd; 136 } __attribute__((packed)); 137 typedef __u8 virtio_net_ctrl_ack; 138 #define VIRTIO_NET_OK 0 139 #define VIRTIO_NET_ERR 1 140 #define VIRTIO_NET_CTRL_RX 0 141 #define VIRTIO_NET_CTRL_RX_PROMISC 0 142 #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 143 #define VIRTIO_NET_CTRL_RX_ALLUNI 2 144 #define VIRTIO_NET_CTRL_RX_NOMULTI 3 145 #define VIRTIO_NET_CTRL_RX_NOUNI 4 146 #define VIRTIO_NET_CTRL_RX_NOBCAST 5 147 struct virtio_net_ctrl_mac { 148 __virtio32 entries; 149 __u8 macs[][ETH_ALEN]; 150 } __attribute__((packed)); 151 #define VIRTIO_NET_CTRL_MAC 1 152 #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0 153 #define VIRTIO_NET_CTRL_MAC_ADDR_SET 1 154 #define VIRTIO_NET_CTRL_VLAN 2 155 #define VIRTIO_NET_CTRL_VLAN_ADD 0 156 #define VIRTIO_NET_CTRL_VLAN_DEL 1 157 #define VIRTIO_NET_CTRL_ANNOUNCE 3 158 #define VIRTIO_NET_CTRL_ANNOUNCE_ACK 0 159 #define VIRTIO_NET_CTRL_MQ 4 160 struct virtio_net_ctrl_mq { 161 __virtio16 virtqueue_pairs; 162 }; 163 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0 164 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1 165 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000 166 struct virtio_net_rss_config { 167 __le32 hash_types; 168 __le16 indirection_table_mask; 169 __le16 unclassified_queue; 170 __le16 indirection_table[1]; 171 __le16 max_tx_vq; 172 __u8 hash_key_length; 173 __u8 hash_key_data[]; 174 }; 175 #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1 176 struct virtio_net_hash_config { 177 __le32 hash_types; 178 __le16 reserved[4]; 179 __u8 hash_key_length; 180 __u8 hash_key_data[]; 181 }; 182 #define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2 183 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5 184 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0 185 #define VIRTIO_NET_CTRL_NOTF_COAL 6 186 struct virtio_net_ctrl_coal_tx { 187 __le32 tx_max_packets; 188 __le32 tx_usecs; 189 }; 190 #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 191 struct virtio_net_ctrl_coal_rx { 192 __le32 rx_max_packets; 193 __le32 rx_usecs; 194 }; 195 #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1 196 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET 2 197 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET 3 198 struct virtio_net_ctrl_coal { 199 __le32 max_packets; 200 __le32 max_usecs; 201 }; 202 struct virtio_net_ctrl_coal_vq { 203 __le16 vqn; 204 __le16 reserved; 205 struct virtio_net_ctrl_coal coal; 206 }; 207 #define VIRTIO_NET_CTRL_STATS 8 208 #define VIRTIO_NET_CTRL_STATS_QUERY 0 209 #define VIRTIO_NET_CTRL_STATS_GET 1 210 struct virtio_net_stats_capabilities { 211 #define VIRTIO_NET_STATS_TYPE_CVQ (1ULL << 32) 212 #define VIRTIO_NET_STATS_TYPE_RX_BASIC (1ULL << 0) 213 #define VIRTIO_NET_STATS_TYPE_RX_CSUM (1ULL << 1) 214 #define VIRTIO_NET_STATS_TYPE_RX_GSO (1ULL << 2) 215 #define VIRTIO_NET_STATS_TYPE_RX_SPEED (1ULL << 3) 216 #define VIRTIO_NET_STATS_TYPE_TX_BASIC (1ULL << 16) 217 #define VIRTIO_NET_STATS_TYPE_TX_CSUM (1ULL << 17) 218 #define VIRTIO_NET_STATS_TYPE_TX_GSO (1ULL << 18) 219 #define VIRTIO_NET_STATS_TYPE_TX_SPEED (1ULL << 19) 220 __le64 supported_stats_types[1]; 221 }; 222 struct virtio_net_ctrl_queue_stats { 223 struct { 224 __le16 vq_index; 225 __le16 reserved[3]; 226 __le64 types_bitmap[1]; 227 } stats[1]; 228 }; 229 struct virtio_net_stats_reply_hdr { 230 #define VIRTIO_NET_STATS_TYPE_REPLY_CVQ 32 231 #define VIRTIO_NET_STATS_TYPE_REPLY_RX_BASIC 0 232 #define VIRTIO_NET_STATS_TYPE_REPLY_RX_CSUM 1 233 #define VIRTIO_NET_STATS_TYPE_REPLY_RX_GSO 2 234 #define VIRTIO_NET_STATS_TYPE_REPLY_RX_SPEED 3 235 #define VIRTIO_NET_STATS_TYPE_REPLY_TX_BASIC 16 236 #define VIRTIO_NET_STATS_TYPE_REPLY_TX_CSUM 17 237 #define VIRTIO_NET_STATS_TYPE_REPLY_TX_GSO 18 238 #define VIRTIO_NET_STATS_TYPE_REPLY_TX_SPEED 19 239 __u8 type; 240 __u8 reserved; 241 __le16 vq_index; 242 __le16 reserved1; 243 __le16 size; 244 }; 245 struct virtio_net_stats_cvq { 246 struct virtio_net_stats_reply_hdr hdr; 247 __le64 command_num; 248 __le64 ok_num; 249 }; 250 struct virtio_net_stats_rx_basic { 251 struct virtio_net_stats_reply_hdr hdr; 252 __le64 rx_notifications; 253 __le64 rx_packets; 254 __le64 rx_bytes; 255 __le64 rx_interrupts; 256 __le64 rx_drops; 257 __le64 rx_drop_overruns; 258 }; 259 struct virtio_net_stats_tx_basic { 260 struct virtio_net_stats_reply_hdr hdr; 261 __le64 tx_notifications; 262 __le64 tx_packets; 263 __le64 tx_bytes; 264 __le64 tx_interrupts; 265 __le64 tx_drops; 266 __le64 tx_drop_malformed; 267 }; 268 struct virtio_net_stats_rx_csum { 269 struct virtio_net_stats_reply_hdr hdr; 270 __le64 rx_csum_valid; 271 __le64 rx_needs_csum; 272 __le64 rx_csum_none; 273 __le64 rx_csum_bad; 274 }; 275 struct virtio_net_stats_tx_csum { 276 struct virtio_net_stats_reply_hdr hdr; 277 __le64 tx_csum_none; 278 __le64 tx_needs_csum; 279 }; 280 struct virtio_net_stats_rx_gso { 281 struct virtio_net_stats_reply_hdr hdr; 282 __le64 rx_gso_packets; 283 __le64 rx_gso_bytes; 284 __le64 rx_gso_packets_coalesced; 285 __le64 rx_gso_bytes_coalesced; 286 }; 287 struct virtio_net_stats_tx_gso { 288 struct virtio_net_stats_reply_hdr hdr; 289 __le64 tx_gso_packets; 290 __le64 tx_gso_bytes; 291 __le64 tx_gso_segments; 292 __le64 tx_gso_segments_bytes; 293 __le64 tx_gso_packets_noseg; 294 __le64 tx_gso_bytes_noseg; 295 }; 296 struct virtio_net_stats_rx_speed { 297 struct virtio_net_stats_reply_hdr hdr; 298 __le64 rx_ratelimit_packets; 299 __le64 rx_ratelimit_bytes; 300 }; 301 struct virtio_net_stats_tx_speed { 302 struct virtio_net_stats_reply_hdr hdr; 303 __le64 tx_ratelimit_packets; 304 __le64 tx_ratelimit_bytes; 305 }; 306 #endif 307