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