| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <zircon/compiler.h> |
| #include <ddk/protocol/ethernet.h> |
| |
| // clang-format off |
| |
| #define VIRTIO_NET_F_CSUM (1u << 0) |
| #define VIRTIO_NET_F_GUEST_CSUM (1u << 1) |
| #define VIRTIO_NET_F_CNTRL_GUEST_OFFLOADS (1u << 2) |
| #define VIRTIO_NET_F_MAC (1u << 5) |
| #define VIRTIO_NET_F_GSO (1u << 6) |
| #define VIRTIO_NET_F_GUEST_TSO4 (1u << 7) |
| #define VIRTIO_NET_F_GUEST_TSO6 (1u << 8) |
| #define VIRTIO_NET_F_GUEST_ECN (1u << 9) |
| #define VIRTIO_NET_F_GUEST_UFO (1u << 10) |
| #define VIRTIO_NET_F_HOST_TSO4 (1u << 11) |
| #define VIRTIO_NET_F_HOST_TSO6 (1u << 12) |
| #define VIRTIO_NET_F_HOST_ECN (1u << 13) |
| #define VIRTIO_NET_F_HOST_UFO (1u << 14) |
| #define VIRTIO_NET_F_MRG_RXBUF (1u << 15) |
| #define VIRTIO_NET_F_STATUS (1u << 16) |
| #define VIRTIO_NET_F_CTRL_VQ (1u << 17) |
| #define VIRTIO_NET_F_CTRL_RX (1u << 18) |
| #define VIRTIO_NET_F_CTRL_VLAN (1u << 19) |
| #define VIRTIO_NET_F_GUEST_ANNOUNCE (1u << 21) |
| #define VIRTIO_NET_F_MQ (1u << 22) |
| #define VIRTIO_NET_F_CTRL_MAC_ADDR (1u << 23) |
| |
| #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1u |
| |
| #define VIRTIO_NET_HDR_GSO_NONE 0u |
| #define VIRTIO_NET_HDR_GSO_TCPV4 1u |
| #define VIRTIO_NET_HDR_GSO_UDP 3u |
| #define VIRTIO_NET_HDR_GSO_TCPV6 4u |
| #define VIRTIO_NET_HDR_GSO_ECN 0x80u |
| |
| #define VIRTIO_NET_S_LINK_UP 1u |
| #define VIRTIO_NET_S_ANNOUNCE 2u |
| |
| // clang-format on |
| |
| __BEGIN_CDECLS |
| |
| typedef struct virtio_net_config { |
| uint8_t mac[ETH_MAC_SIZE]; |
| uint16_t status; |
| uint16_t max_virtqueue_pairs; |
| } __PACKED virtio_net_config_t; |
| |
| typedef struct virtio_net_hdr { |
| uint8_t flags; |
| uint8_t gso_type; |
| uint16_t hdr_len; |
| uint16_t gso_size; |
| uint16_t csum_start; |
| uint16_t csum_offset; |
| } __PACKED virtio_net_hdr_t; |
| |
| __END_CDECLS |