1// Copyright 2017 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <ddk/protocol/ethernet.h> 8#include <stdint.h> 9#include <zircon/compiler.h> 10 11// clang-format off 12 13#define VIRTIO_NET_F_CSUM (1u << 0) 14#define VIRTIO_NET_F_GUEST_CSUM (1u << 1) 15#define VIRTIO_NET_F_CNTRL_GUEST_OFFLOADS (1u << 2) 16#define VIRTIO_NET_F_MAC (1u << 5) 17#define VIRTIO_NET_F_GSO (1u << 6) 18#define VIRTIO_NET_F_GUEST_TSO4 (1u << 7) 19#define VIRTIO_NET_F_GUEST_TSO6 (1u << 8) 20#define VIRTIO_NET_F_GUEST_ECN (1u << 9) 21#define VIRTIO_NET_F_GUEST_UFO (1u << 10) 22#define VIRTIO_NET_F_HOST_TSO4 (1u << 11) 23#define VIRTIO_NET_F_HOST_TSO6 (1u << 12) 24#define VIRTIO_NET_F_HOST_ECN (1u << 13) 25#define VIRTIO_NET_F_HOST_UFO (1u << 14) 26#define VIRTIO_NET_F_MRG_RXBUF (1u << 15) 27#define VIRTIO_NET_F_STATUS (1u << 16) 28#define VIRTIO_NET_F_CTRL_VQ (1u << 17) 29#define VIRTIO_NET_F_CTRL_RX (1u << 18) 30#define VIRTIO_NET_F_CTRL_VLAN (1u << 19) 31#define VIRTIO_NET_F_GUEST_ANNOUNCE (1u << 21) 32#define VIRTIO_NET_F_MQ (1u << 22) 33#define VIRTIO_NET_F_CTRL_MAC_ADDR (1u << 23) 34 35#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1u 36 37#define VIRTIO_NET_HDR_GSO_NONE 0u 38#define VIRTIO_NET_HDR_GSO_TCPV4 1u 39#define VIRTIO_NET_HDR_GSO_UDP 3u 40#define VIRTIO_NET_HDR_GSO_TCPV6 4u 41#define VIRTIO_NET_HDR_GSO_ECN 0x80u 42 43#define VIRTIO_NET_S_LINK_UP 1u 44#define VIRTIO_NET_S_ANNOUNCE 2u 45 46// clang-format on 47 48__BEGIN_CDECLS 49 50typedef struct virtio_net_config { 51 uint8_t mac[ETH_MAC_SIZE]; 52 uint16_t status; 53 uint16_t max_virtqueue_pairs; 54} __PACKED virtio_net_config_t; 55 56typedef struct virtio_net_hdr { 57 uint8_t flags; 58 uint8_t gso_type; 59 uint16_t hdr_len; 60 uint16_t gso_size; 61 uint16_t csum_start; 62 uint16_t csum_offset; 63 // Only if |VIRTIO_NET_F_MRG_RXBUF| or |VIRTIO_F_VERSION_1|. 64 uint16_t num_buffers; 65} __PACKED virtio_net_hdr_t; 66 67__END_CDECLS 68