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