blob: 9c151e183a9d0525bcf01940dd1c1e0baa3e3a95 [file] [log] [blame]
// 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.
#ifndef VIRTIO_NET_H_
#define VIRTIO_NET_H_
#include <stdint.h>
#include <zircon/compiler.h>
// clang-format off
#define VIRTIO_NET_F_CSUM ((uint64_t)1 << 0)
#define VIRTIO_NET_F_GUEST_CSUM ((uint64_t)1 << 1)
#define VIRTIO_NET_F_CNTRL_GUEST_OFFLOADS ((uint64_t)1 << 2)
#define VIRTIO_NET_F_MAC ((uint64_t)1 << 5)
#define VIRTIO_NET_F_GSO ((uint64_t)1 << 6)
#define VIRTIO_NET_F_GUEST_TSO4 ((uint64_t)1 << 7)
#define VIRTIO_NET_F_GUEST_TSO6 ((uint64_t)1 << 8)
#define VIRTIO_NET_F_GUEST_ECN ((uint64_t)1 << 9)
#define VIRTIO_NET_F_GUEST_UFO ((uint64_t)1 << 10)
#define VIRTIO_NET_F_HOST_TSO4 ((uint64_t)1 << 11)
#define VIRTIO_NET_F_HOST_TSO6 ((uint64_t)1 << 12)
#define VIRTIO_NET_F_HOST_ECN ((uint64_t)1 << 13)
#define VIRTIO_NET_F_HOST_UFO ((uint64_t)1 << 14)
#define VIRTIO_NET_F_MRG_RXBUF ((uint64_t)1 << 15)
#define VIRTIO_NET_F_STATUS ((uint64_t)1 << 16)
#define VIRTIO_NET_F_CTRL_VQ ((uint64_t)1 << 17)
#define VIRTIO_NET_F_CTRL_RX ((uint64_t)1 << 18)
#define VIRTIO_NET_F_CTRL_VLAN ((uint64_t)1 << 19)
#define VIRTIO_NET_F_GUEST_ANNOUNCE ((uint64_t)1 << 21)
#define VIRTIO_NET_F_MQ ((uint64_t)1 << 22)
#define VIRTIO_NET_F_CTRL_MAC_ADDR ((uint64_t)1 << 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
#define VIRTIO_ETH_MAC_SIZE 6
typedef struct virtio_net_config {
uint8_t mac[VIRTIO_ETH_MAC_SIZE];
uint16_t status;
uint16_t max_virtqueue_pairs;
} __PACKED virtio_net_config_t;
typedef struct virtio_legacy_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_legacy_net_hdr_t;
// Only if |VIRTIO_NET_F_MRG_RXBUF| or |VIRTIO_F_VERSION_1|.
typedef struct virtio_net_hdr {
virtio_legacy_net_hdr_t base;
uint16_t num_buffers;
} __PACKED virtio_net_hdr_t;
__END_CDECLS
#endif // VIRTIO_NET_H_