1*5c4a5fe1SAndy Fiddaman /* 2*5c4a5fe1SAndy Fiddaman * This file and its contents are supplied under the terms of the 3*5c4a5fe1SAndy Fiddaman * Common Development and Distribution License ("CDDL"), version 1.0. 4*5c4a5fe1SAndy Fiddaman * You may only use this file in accordance with the terms of version 5*5c4a5fe1SAndy Fiddaman * 1.0 of the CDDL. 6*5c4a5fe1SAndy Fiddaman * 7*5c4a5fe1SAndy Fiddaman * A full copy of the text of the CDDL should have accompanied this 8*5c4a5fe1SAndy Fiddaman * source. A copy of the CDDL is also available via the Internet at 9*5c4a5fe1SAndy Fiddaman * http://www.illumos.org/license/CDDL. 10*5c4a5fe1SAndy Fiddaman * 11*5c4a5fe1SAndy Fiddaman * Copyright 2022 OmniOS Community Edition (OmniOSce) Association. 12*5c4a5fe1SAndy Fiddaman */ 13*5c4a5fe1SAndy Fiddaman 14*5c4a5fe1SAndy Fiddaman #ifndef _VIRTIO_NET_H_ 15*5c4a5fe1SAndy Fiddaman #define _VIRTIO_NET_H_ 16*5c4a5fe1SAndy Fiddaman 17*5c4a5fe1SAndy Fiddaman #include "mevent.h" 18*5c4a5fe1SAndy Fiddaman #include "net_backends.h" 19*5c4a5fe1SAndy Fiddaman 20*5c4a5fe1SAndy Fiddaman /* 21*5c4a5fe1SAndy Fiddaman * This structure appears at the start of each control virtqueue request. 22*5c4a5fe1SAndy Fiddaman */ 23*5c4a5fe1SAndy Fiddaman typedef struct virtio_net_ctrl_hdr { 24*5c4a5fe1SAndy Fiddaman uint8_t vnch_class; 25*5c4a5fe1SAndy Fiddaman uint8_t vnch_command; 26*5c4a5fe1SAndy Fiddaman } __packed virtio_net_ctrl_hdr_t; 27*5c4a5fe1SAndy Fiddaman 28*5c4a5fe1SAndy Fiddaman /* 29*5c4a5fe1SAndy Fiddaman * This structure is used for the mac address tables associated with the 30*5c4a5fe1SAndy Fiddaman * VIRTIO_NET_CTRL_MAC class. 31*5c4a5fe1SAndy Fiddaman */ 32*5c4a5fe1SAndy Fiddaman typedef struct virtio_net_ctrl_mac { 33*5c4a5fe1SAndy Fiddaman uint32_t vncm_entries; 34*5c4a5fe1SAndy Fiddaman ether_addr_t vncm_mac; 35*5c4a5fe1SAndy Fiddaman } __packed virtio_net_ctrl_mac_t; 36*5c4a5fe1SAndy Fiddaman 37*5c4a5fe1SAndy Fiddaman /* 38*5c4a5fe1SAndy Fiddaman * Control Queue Classes 39*5c4a5fe1SAndy Fiddaman */ 40*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX 0 41*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_MAC 1 42*5c4a5fe1SAndy Fiddaman 43*5c4a5fe1SAndy Fiddaman /* 44*5c4a5fe1SAndy Fiddaman * CTRL_RX commands 45*5c4a5fe1SAndy Fiddaman */ 46*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_PROMISC 0 47*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 48*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_ALLUNI 2 49*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_NOMULTI 3 50*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_NOUNI 4 51*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_RX_NOBCAST 5 52*5c4a5fe1SAndy Fiddaman 53*5c4a5fe1SAndy Fiddaman /* CTRL_MAC commands */ 54*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_MAC_TABLE_SET 0 55*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CTRL_MAC_ADDR_SET 1 56*5c4a5fe1SAndy Fiddaman 57*5c4a5fe1SAndy Fiddaman /* 58*5c4a5fe1SAndy Fiddaman * Control queue ack values 59*5c4a5fe1SAndy Fiddaman */ 60*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CQ_OK 0 61*5c4a5fe1SAndy Fiddaman #define VIRTIO_NET_CQ_ERR 1 62*5c4a5fe1SAndy Fiddaman 63*5c4a5fe1SAndy Fiddaman #endif /* _VIRTIO_NET_H_ */ 64