xref: /illumos-gate/usr/src/cmd/bhyve/virtio_net.h (revision d42215742078c4b86986b7caf29fc50c30929197)
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