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_VQ_NOTF_COAL 52 37 #define VIRTIO_NET_F_NOTF_COAL 53 38 #define VIRTIO_NET_F_GUEST_USO4 54 39 #define VIRTIO_NET_F_GUEST_USO6 55 40 #define VIRTIO_NET_F_HOST_USO 56 41 #define VIRTIO_NET_F_HASH_REPORT 57 42 #define VIRTIO_NET_F_GUEST_HDRLEN 59 43 #define VIRTIO_NET_F_RSS 60 44 #define VIRTIO_NET_F_RSC_EXT 61 45 #define VIRTIO_NET_F_STANDBY 62 46 #define VIRTIO_NET_F_SPEED_DUPLEX 63 47 #ifndef VIRTIO_NET_NO_LEGACY 48 #define VIRTIO_NET_F_GSO 6 49 #endif 50 #define VIRTIO_NET_S_LINK_UP 1 51 #define VIRTIO_NET_S_ANNOUNCE 2 52 #define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0) 53 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1) 54 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2) 55 #define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3) 56 #define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4) 57 #define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5) 58 #define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6) 59 #define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX (1 << 7) 60 #define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX (1 << 8) 61 struct virtio_net_config { 62 __u8 mac[ETH_ALEN]; 63 __virtio16 status; 64 __virtio16 max_virtqueue_pairs; 65 __virtio16 mtu; 66 __le32 speed; 67 __u8 duplex; 68 __u8 rss_max_key_size; 69 __le16 rss_max_indirection_table_length; 70 __le32 supported_hash_types; 71 } __attribute__((packed)); 72 struct virtio_net_hdr_v1 { 73 #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 74 #define VIRTIO_NET_HDR_F_DATA_VALID 2 75 #define VIRTIO_NET_HDR_F_RSC_INFO 4 76 __u8 flags; 77 #define VIRTIO_NET_HDR_GSO_NONE 0 78 #define VIRTIO_NET_HDR_GSO_TCPV4 1 79 #define VIRTIO_NET_HDR_GSO_UDP 3 80 #define VIRTIO_NET_HDR_GSO_TCPV6 4 81 #define VIRTIO_NET_HDR_GSO_UDP_L4 5 82 #define VIRTIO_NET_HDR_GSO_ECN 0x80 83 __u8 gso_type; 84 __virtio16 hdr_len; 85 __virtio16 gso_size; 86 union { 87 struct { 88 __virtio16 csum_start; 89 __virtio16 csum_offset; 90 }; 91 struct { 92 __virtio16 start; 93 __virtio16 offset; 94 } csum; 95 struct { 96 __le16 segments; 97 __le16 dup_acks; 98 } rsc; 99 }; 100 __virtio16 num_buffers; 101 }; 102 struct virtio_net_hdr_v1_hash { 103 struct virtio_net_hdr_v1 hdr; 104 __le32 hash_value; 105 #define VIRTIO_NET_HASH_REPORT_NONE 0 106 #define VIRTIO_NET_HASH_REPORT_IPv4 1 107 #define VIRTIO_NET_HASH_REPORT_TCPv4 2 108 #define VIRTIO_NET_HASH_REPORT_UDPv4 3 109 #define VIRTIO_NET_HASH_REPORT_IPv6 4 110 #define VIRTIO_NET_HASH_REPORT_TCPv6 5 111 #define VIRTIO_NET_HASH_REPORT_UDPv6 6 112 #define VIRTIO_NET_HASH_REPORT_IPv6_EX 7 113 #define VIRTIO_NET_HASH_REPORT_TCPv6_EX 8 114 #define VIRTIO_NET_HASH_REPORT_UDPv6_EX 9 115 __le16 hash_report; 116 __le16 padding; 117 }; 118 #ifndef VIRTIO_NET_NO_LEGACY 119 struct virtio_net_hdr { 120 __u8 flags; 121 __u8 gso_type; 122 __virtio16 hdr_len; 123 __virtio16 gso_size; 124 __virtio16 csum_start; 125 __virtio16 csum_offset; 126 }; 127 struct virtio_net_hdr_mrg_rxbuf { 128 struct virtio_net_hdr hdr; 129 __virtio16 num_buffers; 130 }; 131 #endif 132 struct virtio_net_ctrl_hdr { 133 __u8 __linux_class; 134 __u8 cmd; 135 } __attribute__((packed)); 136 typedef __u8 virtio_net_ctrl_ack; 137 #define VIRTIO_NET_OK 0 138 #define VIRTIO_NET_ERR 1 139 #define VIRTIO_NET_CTRL_RX 0 140 #define VIRTIO_NET_CTRL_RX_PROMISC 0 141 #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 142 #define VIRTIO_NET_CTRL_RX_ALLUNI 2 143 #define VIRTIO_NET_CTRL_RX_NOMULTI 3 144 #define VIRTIO_NET_CTRL_RX_NOUNI 4 145 #define VIRTIO_NET_CTRL_RX_NOBCAST 5 146 struct virtio_net_ctrl_mac { 147 __virtio32 entries; 148 __u8 macs[][ETH_ALEN]; 149 } __attribute__((packed)); 150 #define VIRTIO_NET_CTRL_MAC 1 151 #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0 152 #define VIRTIO_NET_CTRL_MAC_ADDR_SET 1 153 #define VIRTIO_NET_CTRL_VLAN 2 154 #define VIRTIO_NET_CTRL_VLAN_ADD 0 155 #define VIRTIO_NET_CTRL_VLAN_DEL 1 156 #define VIRTIO_NET_CTRL_ANNOUNCE 3 157 #define VIRTIO_NET_CTRL_ANNOUNCE_ACK 0 158 #define VIRTIO_NET_CTRL_MQ 4 159 struct virtio_net_ctrl_mq { 160 __virtio16 virtqueue_pairs; 161 }; 162 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET 0 163 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN 1 164 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX 0x8000 165 struct virtio_net_rss_config { 166 __le32 hash_types; 167 __le16 indirection_table_mask; 168 __le16 unclassified_queue; 169 __le16 indirection_table[1]; 170 __le16 max_tx_vq; 171 __u8 hash_key_length; 172 __u8 hash_key_data[]; 173 }; 174 #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1 175 struct virtio_net_hash_config { 176 __le32 hash_types; 177 __le16 reserved[4]; 178 __u8 hash_key_length; 179 __u8 hash_key_data[]; 180 }; 181 #define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2 182 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS 5 183 #define VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET 0 184 #define VIRTIO_NET_CTRL_NOTF_COAL 6 185 struct virtio_net_ctrl_coal_tx { 186 __le32 tx_max_packets; 187 __le32 tx_usecs; 188 }; 189 #define VIRTIO_NET_CTRL_NOTF_COAL_TX_SET 0 190 struct virtio_net_ctrl_coal_rx { 191 __le32 rx_max_packets; 192 __le32 rx_usecs; 193 }; 194 #define VIRTIO_NET_CTRL_NOTF_COAL_RX_SET 1 195 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_SET 2 196 #define VIRTIO_NET_CTRL_NOTF_COAL_VQ_GET 3 197 struct virtio_net_ctrl_coal { 198 __le32 max_packets; 199 __le32 max_usecs; 200 }; 201 struct virtio_net_ctrl_coal_vq { 202 __le16 vqn; 203 __le16 reserved; 204 struct virtio_net_ctrl_coal coal; 205 }; 206 #endif 207