xref: /dpdk/drivers/net/netvsc/rndis.h (revision 4e9c73e96e834dbfaa51ada48ad11e7873556808)
1*4e9c73e9SStephen Hemminger /* SPDX-License-Identifier: BSD-3-Clause
2*4e9c73e9SStephen Hemminger  * Copyright (c) 2018 Microsoft Corp.
3*4e9c73e9SStephen Hemminger  * Copyright (c) 2010 Jonathan Armani <armani@openbsd.org>
4*4e9c73e9SStephen Hemminger  * Copyright (c) 2010 Fabien Romano <fabien@openbsd.org>
5*4e9c73e9SStephen Hemminger  * Copyright (c) 2010 Michael Knudsen <mk@openbsd.org>
6*4e9c73e9SStephen Hemminger  * All rights reserved.
7*4e9c73e9SStephen Hemminger  */
8*4e9c73e9SStephen Hemminger 
9*4e9c73e9SStephen Hemminger #ifndef	_NET_RNDIS_H_
10*4e9c73e9SStephen Hemminger #define	_NET_RNDIS_H_
11*4e9c73e9SStephen Hemminger 
12*4e9c73e9SStephen Hemminger /* Canonical major/minor version as of 22th Aug. 2016. */
13*4e9c73e9SStephen Hemminger #define	RNDIS_VERSION_MAJOR		0x00000001
14*4e9c73e9SStephen Hemminger #define	RNDIS_VERSION_MINOR		0x00000000
15*4e9c73e9SStephen Hemminger 
16*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_SUCCESS		0x00000000
17*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_PENDING		0x00000103
18*4e9c73e9SStephen Hemminger 
19*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ONLINE		0x40010003
20*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RESET_START	0x40010004
21*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RESET_END		0x40010005
22*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RING_STATUS	0x40010006
23*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_CLOSED		0x40010007
24*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_WAN_LINE_UP	0x40010008
25*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_WAN_LINE_DOWN	0x40010009
26*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_WAN_FRAGMENT	0x4001000A
27*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_MEDIA_CONNECT	0x4001000B
28*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_MEDIA_DISCONNECT	0x4001000C
29*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_HARDWARE_LINE_UP	0x4001000D
30*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_HARDWARE_LINE_DOWN	0x4001000E
31*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_INTERFACE_UP	0x4001000F
32*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_INTERFACE_DOWN	0x40010010
33*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_MEDIA_BUSY		0x40010011
34*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_MEDIA_SPECIFIC_INDICATION	0x40010012
35*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_WW_INDICATION	RDIA_SPECIFIC_INDICATION
36*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_LINK_SPEED_CHANGE	0x40010013
37*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_NETWORK_CHANGE	0x40010018
38*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG 0x40020006
39*4e9c73e9SStephen Hemminger 
40*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_FAILURE		0xC0000001
41*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RESOURCES		0xC000009A
42*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_NOT_SUPPORTED	0xC00000BB
43*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_CLOSING		0xC0010002
44*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_BAD_VERSION	0xC0010004
45*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_BAD_CHARACTERISTICS 0xC0010005
46*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ADAPTER_NOT_FOUND	0xC0010006
47*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_OPEN_FAILED	0xC0010007
48*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_DEVICE_FAILED	0xC0010008
49*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_MULTICAST_FULL	0xC0010009
50*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_MULTICAST_EXISTS	0xC001000A
51*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_MULTICAST_NOT_FOUND 0xC001000B
52*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_REQUEST_ABORTED	0xC001000C
53*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RESET_IN_PROGRESS	0xC001000D
54*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_CLOSING_INDICATING	0xC001000E
55*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_INVALID_PACKET	0xC001000F
56*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_OPEN_LIST_FULL	0xC0010010
57*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ADAPTER_NOT_READY	0xC0010011
58*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ADAPTER_NOT_OPEN	0xC0010012
59*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_NOT_INDICATING	0xC0010013
60*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_INVALID_LENGTH	0xC0010014
61*4e9c73e9SStephen Hemminger #define	RNDIS_STATUS_INVALID_DATA	0xC0010015
62*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_BUFFER_TOO_SHORT	0xC0010016
63*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_INVALID_OID	0xC0010017
64*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ADAPTER_REMOVED	0xC0010018
65*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_UNSUPPORTED_MEDIA	0xC0010019
66*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_GROUP_ADDRESS_IN_US 0xC001001A
67*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_FILE_NOT_FOUND	0xC001001B
68*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ERROR_READING_FILE	0xC001001C
69*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_ALREADY_MAPPED	0xC001001D
70*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_RESOURCE_CONFLICT	0xC001001E
71*4e9c73e9SStephen Hemminger #define RNDIS_STATUS_NO_CABLE		0xC001001F
72*4e9c73e9SStephen Hemminger 
73*4e9c73e9SStephen Hemminger #define	OID_GEN_SUPPORTED_LIST		0x00010101
74*4e9c73e9SStephen Hemminger #define	OID_GEN_HARDWARE_STATUS		0x00010102
75*4e9c73e9SStephen Hemminger #define	OID_GEN_MEDIA_SUPPORTED		0x00010103
76*4e9c73e9SStephen Hemminger #define	OID_GEN_MEDIA_IN_USE		0x00010104
77*4e9c73e9SStephen Hemminger #define	OID_GEN_MAXIMUM_LOOKAHEAD	0x00010105
78*4e9c73e9SStephen Hemminger #define	OID_GEN_MAXIMUM_FRAME_SIZE	0x00010106
79*4e9c73e9SStephen Hemminger #define	OID_GEN_LINK_SPEED		0x00010107
80*4e9c73e9SStephen Hemminger #define	OID_GEN_TRANSMIT_BUFFER_SPACE	0x00010108
81*4e9c73e9SStephen Hemminger #define	OID_GEN_RECEIVE_BUFFER_SPACE	0x00010109
82*4e9c73e9SStephen Hemminger #define	OID_GEN_TRANSMIT_BLOCK_SIZE	0x0001010A
83*4e9c73e9SStephen Hemminger #define	OID_GEN_RECEIVE_BLOCK_SIZE	0x0001010B
84*4e9c73e9SStephen Hemminger #define	OID_GEN_VENDOR_ID		0x0001010C
85*4e9c73e9SStephen Hemminger #define	OID_GEN_VENDOR_DESCRIPTION	0x0001010D
86*4e9c73e9SStephen Hemminger #define	OID_GEN_CURRENT_PACKET_FILTER	0x0001010E
87*4e9c73e9SStephen Hemminger #define	OID_GEN_CURRENT_LOOKAHEAD	0x0001010F
88*4e9c73e9SStephen Hemminger #define	OID_GEN_DRIVER_VERSION		0x00010110
89*4e9c73e9SStephen Hemminger #define	OID_GEN_MAXIMUM_TOTAL_SIZE	0x00010111
90*4e9c73e9SStephen Hemminger #define	OID_GEN_PROTOCOL_OPTIONS	0x00010112
91*4e9c73e9SStephen Hemminger #define	OID_GEN_MAC_OPTIONS		0x00010113
92*4e9c73e9SStephen Hemminger #define	OID_GEN_MEDIA_CONNECT_STATUS	0x00010114
93*4e9c73e9SStephen Hemminger #define	OID_GEN_MAXIMUM_SEND_PACKETS	0x00010115
94*4e9c73e9SStephen Hemminger #define	OID_GEN_VENDOR_DRIVER_VERSION	0x00010116
95*4e9c73e9SStephen Hemminger #define	OID_GEN_SUPPORTED_GUIDS		0x00010117
96*4e9c73e9SStephen Hemminger #define	OID_GEN_NETWORK_LAYER_ADDRESSES	0x00010118
97*4e9c73e9SStephen Hemminger #define	OID_GEN_TRANSPORT_HEADER_OFFSET	0x00010119
98*4e9c73e9SStephen Hemminger #define	OID_GEN_RECEIVE_SCALE_CAPABILITIES	0x00010203
99*4e9c73e9SStephen Hemminger #define	OID_GEN_RECEIVE_SCALE_PARAMETERS	0x00010204
100*4e9c73e9SStephen Hemminger #define	OID_GEN_MACHINE_NAME		0x0001021A
101*4e9c73e9SStephen Hemminger #define	OID_GEN_RNDIS_CONFIG_PARAMETER	0x0001021B
102*4e9c73e9SStephen Hemminger #define	OID_GEN_VLAN_ID			0x0001021C
103*4e9c73e9SStephen Hemminger 
104*4e9c73e9SStephen Hemminger #define	OID_802_3_PERMANENT_ADDRESS	0x01010101
105*4e9c73e9SStephen Hemminger #define	OID_802_3_CURRENT_ADDRESS	0x01010102
106*4e9c73e9SStephen Hemminger #define	OID_802_3_MULTICAST_LIST	0x01010103
107*4e9c73e9SStephen Hemminger #define	OID_802_3_MAXIMUM_LIST_SIZE	0x01010104
108*4e9c73e9SStephen Hemminger #define	OID_802_3_MAC_OPTIONS		0x01010105
109*4e9c73e9SStephen Hemminger #define	OID_802_3_RCV_ERROR_ALIGNMENT	0x01020101
110*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_ONE_COLLISION	0x01020102
111*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_MORE_COLLISIONS	0x01020103
112*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_DEFERRED		0x01020201
113*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_MAX_COLLISIONS	0x01020202
114*4e9c73e9SStephen Hemminger #define	OID_802_3_RCV_OVERRUN		0x01020203
115*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_UNDERRUN		0x01020204
116*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_HEARTBEAT_FAILURE	0x01020205
117*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_TIMES_CRS_LOST	0x01020206
118*4e9c73e9SStephen Hemminger #define	OID_802_3_XMIT_LATE_COLLISIONS	0x01020207
119*4e9c73e9SStephen Hemminger 
120*4e9c73e9SStephen Hemminger #define	OID_TCP_OFFLOAD_PARAMETERS	0xFC01020C
121*4e9c73e9SStephen Hemminger #define	OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES	0xFC01020D
122*4e9c73e9SStephen Hemminger 
123*4e9c73e9SStephen Hemminger #define	RNDIS_MEDIUM_802_3		0x00000000
124*4e9c73e9SStephen Hemminger 
125*4e9c73e9SStephen Hemminger /* Device flags */
126*4e9c73e9SStephen Hemminger #define	RNDIS_DF_CONNECTIONLESS		0x00000001
127*4e9c73e9SStephen Hemminger #define	RNDIS_DF_CONNECTION_ORIENTED	0x00000002
128*4e9c73e9SStephen Hemminger 
129*4e9c73e9SStephen Hemminger /*
130*4e9c73e9SStephen Hemminger  * Common RNDIS message header.
131*4e9c73e9SStephen Hemminger  */
132*4e9c73e9SStephen Hemminger struct rndis_msghdr {
133*4e9c73e9SStephen Hemminger 	uint32_t type;
134*4e9c73e9SStephen Hemminger 	uint32_t len;
135*4e9c73e9SStephen Hemminger };
136*4e9c73e9SStephen Hemminger 
137*4e9c73e9SStephen Hemminger /*
138*4e9c73e9SStephen Hemminger  * RNDIS data message
139*4e9c73e9SStephen Hemminger  */
140*4e9c73e9SStephen Hemminger #define	RNDIS_PACKET_MSG		0x00000001
141*4e9c73e9SStephen Hemminger 
142*4e9c73e9SStephen Hemminger struct rndis_packet_msg {
143*4e9c73e9SStephen Hemminger 	uint32_t type;
144*4e9c73e9SStephen Hemminger 	uint32_t len;
145*4e9c73e9SStephen Hemminger 	uint32_t dataoffset;
146*4e9c73e9SStephen Hemminger 	uint32_t datalen;
147*4e9c73e9SStephen Hemminger 	uint32_t oobdataoffset;
148*4e9c73e9SStephen Hemminger 	uint32_t oobdatalen;
149*4e9c73e9SStephen Hemminger 	uint32_t oobdataelements;
150*4e9c73e9SStephen Hemminger 	uint32_t pktinfooffset;
151*4e9c73e9SStephen Hemminger 	uint32_t pktinfolen;
152*4e9c73e9SStephen Hemminger 	uint32_t vchandle;
153*4e9c73e9SStephen Hemminger 	uint32_t reserved;
154*4e9c73e9SStephen Hemminger };
155*4e9c73e9SStephen Hemminger 
156*4e9c73e9SStephen Hemminger /*
157*4e9c73e9SStephen Hemminger  * Minimum value for dataoffset, oobdataoffset, and
158*4e9c73e9SStephen Hemminger  * pktinfooffset.
159*4e9c73e9SStephen Hemminger  */
160*4e9c73e9SStephen Hemminger #define	RNDIS_PACKET_MSG_OFFSET_MIN		\
161*4e9c73e9SStephen Hemminger 	(sizeof(struct rndis_packet_msg) -	\
162*4e9c73e9SStephen Hemminger 	 offsetof(struct rndis_packet_msg, dataoffset))
163*4e9c73e9SStephen Hemminger 
164*4e9c73e9SStephen Hemminger /* Offset from the beginning of rndis_packet_msg. */
165*4e9c73e9SStephen Hemminger #define	RNDIS_PACKET_MSG_OFFSET_ABS(ofs)	\
166*4e9c73e9SStephen Hemminger 	((ofs) + offsetof(struct rndis_packet_msg, dataoffset))
167*4e9c73e9SStephen Hemminger 
168*4e9c73e9SStephen Hemminger #define	RNDIS_PACKET_MSG_OFFSET_ALIGN		4
169*4e9c73e9SStephen Hemminger #define	RNDIS_PACKET_MSG_OFFSET_ALIGNMASK	\
170*4e9c73e9SStephen Hemminger 	(RNDIS_PACKET_MSG_OFFSET_ALIGN - 1)
171*4e9c73e9SStephen Hemminger 
172*4e9c73e9SStephen Hemminger /* Per-packet-info for RNDIS data message */
173*4e9c73e9SStephen Hemminger struct rndis_pktinfo {
174*4e9c73e9SStephen Hemminger 	uint32_t size;
175*4e9c73e9SStephen Hemminger 	uint32_t type;		/* NDIS_PKTINFO_TYPE_ */
176*4e9c73e9SStephen Hemminger 	uint32_t offset;
177*4e9c73e9SStephen Hemminger 	uint8_t data[];
178*4e9c73e9SStephen Hemminger };
179*4e9c73e9SStephen Hemminger 
180*4e9c73e9SStephen Hemminger #define	RNDIS_PKTINFO_OFFSET		\
181*4e9c73e9SStephen Hemminger 	offsetof(struct rndis_pktinfo, data[0])
182*4e9c73e9SStephen Hemminger #define	RNDIS_PKTINFO_SIZE_ALIGN	4
183*4e9c73e9SStephen Hemminger #define	RNDIS_PKTINFO_SIZE_ALIGNMASK	(RNDIS_PKTINFO_SIZE_ALIGN - 1)
184*4e9c73e9SStephen Hemminger 
185*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_CSUM		0
186*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_IPSEC		1
187*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_LSO		2
188*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_CLASSIFY	3
189*4e9c73e9SStephen Hemminger /* reserved 4 */
190*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_SGLIST	5
191*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_VLAN		6
192*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_ORIG		7
193*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_PKT_CANCELID	8
194*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_ORIG_NBLIST	9
195*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_CACHE_NBLIST	10
196*4e9c73e9SStephen Hemminger #define	NDIS_PKTINFO_TYPE_PKT_PAD	11
197*4e9c73e9SStephen Hemminger 
198*4e9c73e9SStephen Hemminger /* RNDIS extension */
199*4e9c73e9SStephen Hemminger 
200*4e9c73e9SStephen Hemminger /* Per-packet hash info */
201*4e9c73e9SStephen Hemminger #define NDIS_HASH_INFO_SIZE		sizeof(uint32_t)
202*4e9c73e9SStephen Hemminger #define NDIS_PKTINFO_TYPE_HASHINF	NDIS_PKTINFO_TYPE_ORIG_NBLIST
203*4e9c73e9SStephen Hemminger /* NDIS_HASH_ */
204*4e9c73e9SStephen Hemminger 
205*4e9c73e9SStephen Hemminger /* Per-packet hash value */
206*4e9c73e9SStephen Hemminger #define NDIS_HASH_VALUE_SIZE		sizeof(uint32_t)
207*4e9c73e9SStephen Hemminger #define NDIS_PKTINFO_TYPE_HASHVAL	NDIS_PKTINFO_TYPE_PKT_CANCELID
208*4e9c73e9SStephen Hemminger 
209*4e9c73e9SStephen Hemminger /* Per-packet-info size */
210*4e9c73e9SStephen Hemminger #define RNDIS_PKTINFO_SIZE(dlen)	offsetof(struct rndis_pktinfo, data[dlen])
211*4e9c73e9SStephen Hemminger 
212*4e9c73e9SStephen Hemminger /*
213*4e9c73e9SStephen Hemminger  * RNDIS control messages
214*4e9c73e9SStephen Hemminger  */
215*4e9c73e9SStephen Hemminger 
216*4e9c73e9SStephen Hemminger /*
217*4e9c73e9SStephen Hemminger  * Common header for RNDIS completion messages.
218*4e9c73e9SStephen Hemminger  *
219*4e9c73e9SStephen Hemminger  * NOTE: It does not apply to RNDIS_RESET_CMPLT.
220*4e9c73e9SStephen Hemminger  */
221*4e9c73e9SStephen Hemminger struct rndis_comp_hdr {
222*4e9c73e9SStephen Hemminger 	uint32_t type;
223*4e9c73e9SStephen Hemminger 	uint32_t len;
224*4e9c73e9SStephen Hemminger 	uint32_t rid;
225*4e9c73e9SStephen Hemminger 	uint32_t status;
226*4e9c73e9SStephen Hemminger };
227*4e9c73e9SStephen Hemminger 
228*4e9c73e9SStephen Hemminger /* Initialize the device. */
229*4e9c73e9SStephen Hemminger #define	RNDIS_INITIALIZE_MSG	0x00000002
230*4e9c73e9SStephen Hemminger #define	RNDIS_INITIALIZE_CMPLT	0x80000002
231*4e9c73e9SStephen Hemminger 
232*4e9c73e9SStephen Hemminger struct rndis_init_req {
233*4e9c73e9SStephen Hemminger 	uint32_t type;
234*4e9c73e9SStephen Hemminger 	uint32_t len;
235*4e9c73e9SStephen Hemminger 	uint32_t rid;
236*4e9c73e9SStephen Hemminger 	uint32_t ver_major;
237*4e9c73e9SStephen Hemminger 	uint32_t ver_minor;
238*4e9c73e9SStephen Hemminger 	uint32_t max_xfersz;
239*4e9c73e9SStephen Hemminger };
240*4e9c73e9SStephen Hemminger 
241*4e9c73e9SStephen Hemminger struct rndis_init_comp {
242*4e9c73e9SStephen Hemminger 	uint32_t type;
243*4e9c73e9SStephen Hemminger 	uint32_t len;
244*4e9c73e9SStephen Hemminger 	uint32_t rid;
245*4e9c73e9SStephen Hemminger 	uint32_t status;
246*4e9c73e9SStephen Hemminger 	uint32_t ver_major;
247*4e9c73e9SStephen Hemminger 	uint32_t ver_minor;
248*4e9c73e9SStephen Hemminger 	uint32_t devflags;
249*4e9c73e9SStephen Hemminger 	uint32_t medium;
250*4e9c73e9SStephen Hemminger 	uint32_t pktmaxcnt;
251*4e9c73e9SStephen Hemminger 	uint32_t pktmaxsz;
252*4e9c73e9SStephen Hemminger 	uint32_t align;
253*4e9c73e9SStephen Hemminger 	uint32_t aflistoffset;
254*4e9c73e9SStephen Hemminger 	uint32_t aflistsz;
255*4e9c73e9SStephen Hemminger };
256*4e9c73e9SStephen Hemminger 
257*4e9c73e9SStephen Hemminger #define	RNDIS_INIT_COMP_SIZE_MIN	\
258*4e9c73e9SStephen Hemminger 	offsetof(struct rndis_init_comp, aflistsz)
259*4e9c73e9SStephen Hemminger 
260*4e9c73e9SStephen Hemminger /* Halt the device.  No response sent. */
261*4e9c73e9SStephen Hemminger #define	RNDIS_HALT_MSG		0x00000003
262*4e9c73e9SStephen Hemminger 
263*4e9c73e9SStephen Hemminger struct rndis_halt_req {
264*4e9c73e9SStephen Hemminger 	uint32_t type;
265*4e9c73e9SStephen Hemminger 	uint32_t len;
266*4e9c73e9SStephen Hemminger 	uint32_t rid;
267*4e9c73e9SStephen Hemminger };
268*4e9c73e9SStephen Hemminger 
269*4e9c73e9SStephen Hemminger /* Send a query object. */
270*4e9c73e9SStephen Hemminger #define	RNDIS_QUERY_MSG		0x00000004
271*4e9c73e9SStephen Hemminger #define	RNDIS_QUERY_CMPLT	0x80000004
272*4e9c73e9SStephen Hemminger 
273*4e9c73e9SStephen Hemminger struct rndis_query_req {
274*4e9c73e9SStephen Hemminger 	uint32_t type;
275*4e9c73e9SStephen Hemminger 	uint32_t len;
276*4e9c73e9SStephen Hemminger 	uint32_t rid;
277*4e9c73e9SStephen Hemminger 	uint32_t oid;
278*4e9c73e9SStephen Hemminger 	uint32_t infobuflen;
279*4e9c73e9SStephen Hemminger 	uint32_t infobufoffset;
280*4e9c73e9SStephen Hemminger 	uint32_t devicevchdl;
281*4e9c73e9SStephen Hemminger };
282*4e9c73e9SStephen Hemminger 
283*4e9c73e9SStephen Hemminger #define	RNDIS_QUERY_REQ_INFOBUFOFFSET		\
284*4e9c73e9SStephen Hemminger 	(sizeof(struct rndis_query_req) -	\
285*4e9c73e9SStephen Hemminger 	 offsetof(struct rndis_query_req, rid))
286*4e9c73e9SStephen Hemminger 
287*4e9c73e9SStephen Hemminger struct rndis_query_comp {
288*4e9c73e9SStephen Hemminger 	uint32_t type;
289*4e9c73e9SStephen Hemminger 	uint32_t len;
290*4e9c73e9SStephen Hemminger 	uint32_t rid;
291*4e9c73e9SStephen Hemminger 	uint32_t status;
292*4e9c73e9SStephen Hemminger 	uint32_t infobuflen;
293*4e9c73e9SStephen Hemminger 	uint32_t infobufoffset;
294*4e9c73e9SStephen Hemminger };
295*4e9c73e9SStephen Hemminger 
296*4e9c73e9SStephen Hemminger /* infobuf offset from the beginning of rndis_query_comp. */
297*4e9c73e9SStephen Hemminger #define	RNDIS_QUERY_COMP_INFOBUFOFFSET_ABS(ofs)	\
298*4e9c73e9SStephen Hemminger 	((ofs) + offsetof(struct rndis_query_comp, rid))
299*4e9c73e9SStephen Hemminger 
300*4e9c73e9SStephen Hemminger /* Send a set object request. */
301*4e9c73e9SStephen Hemminger #define	RNDIS_SET_MSG		0x00000005
302*4e9c73e9SStephen Hemminger #define	RNDIS_SET_CMPLT		0x80000005
303*4e9c73e9SStephen Hemminger 
304*4e9c73e9SStephen Hemminger struct rndis_set_req {
305*4e9c73e9SStephen Hemminger 	uint32_t type;
306*4e9c73e9SStephen Hemminger 	uint32_t len;
307*4e9c73e9SStephen Hemminger 	uint32_t rid;
308*4e9c73e9SStephen Hemminger 	uint32_t oid;
309*4e9c73e9SStephen Hemminger 	uint32_t infobuflen;
310*4e9c73e9SStephen Hemminger 	uint32_t infobufoffset;
311*4e9c73e9SStephen Hemminger 	uint32_t devicevchdl;
312*4e9c73e9SStephen Hemminger };
313*4e9c73e9SStephen Hemminger 
314*4e9c73e9SStephen Hemminger #define	RNDIS_SET_REQ_INFOBUFOFFSET		\
315*4e9c73e9SStephen Hemminger 	(sizeof(struct rndis_set_req) -		\
316*4e9c73e9SStephen Hemminger 	 offsetof(struct rndis_set_req, rid))
317*4e9c73e9SStephen Hemminger 
318*4e9c73e9SStephen Hemminger struct rndis_set_comp {
319*4e9c73e9SStephen Hemminger 	uint32_t type;
320*4e9c73e9SStephen Hemminger 	uint32_t len;
321*4e9c73e9SStephen Hemminger 	uint32_t rid;
322*4e9c73e9SStephen Hemminger 	uint32_t status;
323*4e9c73e9SStephen Hemminger };
324*4e9c73e9SStephen Hemminger 
325*4e9c73e9SStephen Hemminger /*
326*4e9c73e9SStephen Hemminger  * Parameter used by OID_GEN_RNDIS_CONFIG_PARAMETER.
327*4e9c73e9SStephen Hemminger  */
328*4e9c73e9SStephen Hemminger #define	RNDIS_SET_PARAM_NUMERIC	0x00000000
329*4e9c73e9SStephen Hemminger #define	RNDIS_SET_PARAM_STRING	0x00000002
330*4e9c73e9SStephen Hemminger 
331*4e9c73e9SStephen Hemminger struct rndis_set_parameter {
332*4e9c73e9SStephen Hemminger 	uint32_t nameoffset;
333*4e9c73e9SStephen Hemminger 	uint32_t namelen;
334*4e9c73e9SStephen Hemminger 	uint32_t type;
335*4e9c73e9SStephen Hemminger 	uint32_t valueoffset;
336*4e9c73e9SStephen Hemminger 	uint32_t valuelen;
337*4e9c73e9SStephen Hemminger };
338*4e9c73e9SStephen Hemminger 
339*4e9c73e9SStephen Hemminger /* Perform a soft reset on the device. */
340*4e9c73e9SStephen Hemminger #define	RNDIS_RESET_MSG		0x00000006
341*4e9c73e9SStephen Hemminger #define	RNDIS_RESET_CMPLT		0x80000006
342*4e9c73e9SStephen Hemminger 
343*4e9c73e9SStephen Hemminger struct rndis_reset_req {
344*4e9c73e9SStephen Hemminger 	uint32_t type;
345*4e9c73e9SStephen Hemminger 	uint32_t len;
346*4e9c73e9SStephen Hemminger 	uint32_t rid;
347*4e9c73e9SStephen Hemminger };
348*4e9c73e9SStephen Hemminger 
349*4e9c73e9SStephen Hemminger struct rndis_reset_comp {
350*4e9c73e9SStephen Hemminger 	uint32_t type;
351*4e9c73e9SStephen Hemminger 	uint32_t len;
352*4e9c73e9SStephen Hemminger 	uint32_t status;
353*4e9c73e9SStephen Hemminger 	uint32_t adrreset;
354*4e9c73e9SStephen Hemminger };
355*4e9c73e9SStephen Hemminger 
356*4e9c73e9SStephen Hemminger /* 802.3 link-state or undefined message error.  Sent by device. */
357*4e9c73e9SStephen Hemminger #define	RNDIS_INDICATE_STATUS_MSG	0x00000007
358*4e9c73e9SStephen Hemminger 
359*4e9c73e9SStephen Hemminger struct rndis_status_msg {
360*4e9c73e9SStephen Hemminger 	uint32_t type;
361*4e9c73e9SStephen Hemminger 	uint32_t len;
362*4e9c73e9SStephen Hemminger 	uint32_t status;
363*4e9c73e9SStephen Hemminger 	uint32_t stbuflen;
364*4e9c73e9SStephen Hemminger 	uint32_t stbufoffset;
365*4e9c73e9SStephen Hemminger 	/* rndis_diag_info */
366*4e9c73e9SStephen Hemminger };
367*4e9c73e9SStephen Hemminger 
368*4e9c73e9SStephen Hemminger /* stbuf offset from the beginning of rndis_status_msg. */
369*4e9c73e9SStephen Hemminger #define	RNDIS_STBUFOFFSET_ABS(ofs)	\
370*4e9c73e9SStephen Hemminger 	((ofs) + offsetof(struct rndis_status_msg, status))
371*4e9c73e9SStephen Hemminger 
372*4e9c73e9SStephen Hemminger /*
373*4e9c73e9SStephen Hemminger  * Immediately after rndis_status_msg.stbufoffset, if a control
374*4e9c73e9SStephen Hemminger  * message is malformatted, or a packet message contains inappropriate
375*4e9c73e9SStephen Hemminger  * content.
376*4e9c73e9SStephen Hemminger  */
377*4e9c73e9SStephen Hemminger struct rndis_diag_info {
378*4e9c73e9SStephen Hemminger 	uint32_t diagstatus;
379*4e9c73e9SStephen Hemminger 	uint32_t erroffset;
380*4e9c73e9SStephen Hemminger };
381*4e9c73e9SStephen Hemminger 
382*4e9c73e9SStephen Hemminger /* Keepalive message.  May be sent by device. */
383*4e9c73e9SStephen Hemminger #define	RNDIS_KEEPALIVE_MSG	0x00000008
384*4e9c73e9SStephen Hemminger #define	RNDIS_KEEPALIVE_CMPLT	0x80000008
385*4e9c73e9SStephen Hemminger 
386*4e9c73e9SStephen Hemminger struct rndis_keepalive_req {
387*4e9c73e9SStephen Hemminger 	uint32_t type;
388*4e9c73e9SStephen Hemminger 	uint32_t len;
389*4e9c73e9SStephen Hemminger 	uint32_t rid;
390*4e9c73e9SStephen Hemminger };
391*4e9c73e9SStephen Hemminger 
392*4e9c73e9SStephen Hemminger struct rndis_keepalive_comp {
393*4e9c73e9SStephen Hemminger 	uint32_t type;
394*4e9c73e9SStephen Hemminger 	uint32_t len;
395*4e9c73e9SStephen Hemminger 	uint32_t rid;
396*4e9c73e9SStephen Hemminger 	uint32_t status;
397*4e9c73e9SStephen Hemminger };
398*4e9c73e9SStephen Hemminger 
399*4e9c73e9SStephen Hemminger /* Packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */
400*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_NONE			0x00000000
401*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_DIRECTED		0x00000001
402*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_MULTICAST		0x00000002
403*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_ALL_MULTICAST		0x00000004
404*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_BROADCAST		0x00000008
405*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_SOURCE_ROUTING		0x00000010
406*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_PROMISCUOUS		0x00000020
407*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_SMT			0x00000040
408*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_ALL_LOCAL		0x00000080
409*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_GROUP			0x00001000
410*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_ALL_FUNCTIONAL		0x00002000
411*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_FUNCTIONAL		0x00004000
412*4e9c73e9SStephen Hemminger #define	NDIS_PACKET_TYPE_MAC_FRAME		0x00008000
413*4e9c73e9SStephen Hemminger 
414*4e9c73e9SStephen Hemminger #endif	/* !_NET_RNDIS_H_ */
415