1*2e0bf311Sandvar /* $NetBSD: rndisreg.h,v 1.6 2021/08/17 22:00:31 andvar Exp $ */ 255c94440Snonaka /* NetBSD: if_urndisreg.h,v 1.4 2018/11/09 21:57:09 maya Exp */ 355c94440Snonaka /* $OpenBSD: if_urndisreg.h,v 1.14 2010/07/08 18:22:01 ckuethe Exp $ */ 455c94440Snonaka 555c94440Snonaka /* 655c94440Snonaka * Copyright (c) 2010 Jonathan Armani <armani@openbsd.org> 755c94440Snonaka * Copyright (c) 2010 Fabien Romano <fabien@openbsd.org> 855c94440Snonaka * Copyright (c) 2010 Michael Knudsen <mk@openbsd.org> 955c94440Snonaka * All rights reserved. 1055c94440Snonaka * 1155c94440Snonaka * Permission to use, copy, modify, and distribute this software for any 1255c94440Snonaka * purpose with or without fee is hereby granted, provided that the above 1355c94440Snonaka * copyright notice and this permission notice appear in all copies. 1455c94440Snonaka * 1555c94440Snonaka * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1655c94440Snonaka * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1755c94440Snonaka * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1855c94440Snonaka * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1955c94440Snonaka * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 2055c94440Snonaka * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 2155c94440Snonaka * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 2255c94440Snonaka */ 2355c94440Snonaka 2455c94440Snonaka #ifndef _DEV_IC_RNDISREG_H_ 2555c94440Snonaka #define _DEV_IC_RNDISREG_H_ 2655c94440Snonaka 2750517e57Snonaka /* Canonical major/minor version as of 22th Aug. 2016. */ 2850517e57Snonaka #define RNDIS_VERSION_MAJOR 0x00000001 2950517e57Snonaka #define RNDIS_VERSION_MINOR 0x00000000 3050517e57Snonaka 3150517e57Snonaka #define RNDIS_STATUS_SUCCESS 0x00000000L 3250517e57Snonaka #define RNDIS_STATUS_PENDING 0x00000103L 3355c94440Snonaka #define RNDIS_STATUS_MEDIA_CONNECT 0x4001000BL 3455c94440Snonaka #define RNDIS_STATUS_MEDIA_DISCONNECT 0x4001000CL 35866b8f41Snonaka #define RNDIS_STATUS_LINK_SPEED_CHANGE 0x40010013L 36866b8f41Snonaka #define RNDIS_STATUS_NETWORK_CHANGE 0x40010018L 3750517e57Snonaka #define RNDIS_STATUS_OFFLOAD_CURRENT_CONFIG 0x40020006 3850517e57Snonaka #define RNDIS_STATUS_BUFFER_OVERFLOW 0x80000005L 3950517e57Snonaka #define RNDIS_STATUS_FAILURE 0xC0000001L 4055c94440Snonaka #define RNDIS_STATUS_RESOURCES 0xC000009AL 4150517e57Snonaka #define RNDIS_STATUS_NOT_SUPPORTED 0xC00000BBL 4250517e57Snonaka #define RNDIS_STATUS_INVALID_DATA 0xC0010015L 4355c94440Snonaka 4455c94440Snonaka #define OID_GEN_SUPPORTED_LIST 0x00010101 4555c94440Snonaka #define OID_GEN_HARDWARE_STATUS 0x00010102 4655c94440Snonaka #define OID_GEN_MEDIA_SUPPORTED 0x00010103 4755c94440Snonaka #define OID_GEN_MEDIA_IN_USE 0x00010104 4855c94440Snonaka #define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105 4955c94440Snonaka #define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106 5055c94440Snonaka #define OID_GEN_LINK_SPEED 0x00010107 5155c94440Snonaka #define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108 5255c94440Snonaka #define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109 5355c94440Snonaka #define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A 5455c94440Snonaka #define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B 5555c94440Snonaka #define OID_GEN_VENDOR_ID 0x0001010C 5655c94440Snonaka #define OID_GEN_VENDOR_DESCRIPTION 0x0001010D 5755c94440Snonaka #define OID_GEN_CURRENT_PACKET_FILTER 0x0001010E 5855c94440Snonaka #define OID_GEN_CURRENT_LOOKAHEAD 0x0001010F 5955c94440Snonaka #define OID_GEN_DRIVER_VERSION 0x00010110 6055c94440Snonaka #define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111 6155c94440Snonaka #define OID_GEN_PROTOCOL_OPTIONS 0x00010112 6255c94440Snonaka #define OID_GEN_MAC_OPTIONS 0x00010113 6355c94440Snonaka #define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114 6455c94440Snonaka #define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115 6555c94440Snonaka #define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116 6655c94440Snonaka #define OID_GEN_SUPPORTED_GUIDS 0x00010117 6755c94440Snonaka #define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 6855c94440Snonaka #define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 69391c7a73Snonaka #define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203 70391c7a73Snonaka #define OID_GEN_RECEIVE_SCALE_PARAMETERS 0x00010204 7155c94440Snonaka #define OID_GEN_MACHINE_NAME 0x0001021A 7255c94440Snonaka #define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B 7355c94440Snonaka #define OID_GEN_VLAN_ID 0x0001021C 7455c94440Snonaka 7555c94440Snonaka #define OID_802_3_PERMANENT_ADDRESS 0x01010101 7655c94440Snonaka #define OID_802_3_CURRENT_ADDRESS 0x01010102 7755c94440Snonaka #define OID_802_3_MULTICAST_LIST 0x01010103 7855c94440Snonaka #define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 7955c94440Snonaka #define OID_802_3_MAC_OPTIONS 0x01010105 8055c94440Snonaka #define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101 8155c94440Snonaka #define OID_802_3_XMIT_ONE_COLLISION 0x01020102 8255c94440Snonaka #define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103 8355c94440Snonaka #define OID_802_3_XMIT_DEFERRED 0x01020201 8455c94440Snonaka #define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202 8555c94440Snonaka #define OID_802_3_RCV_OVERRUN 0x01020203 8655c94440Snonaka #define OID_802_3_XMIT_UNDERRUN 0x01020204 8755c94440Snonaka #define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205 8855c94440Snonaka #define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206 8955c94440Snonaka #define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207 9055c94440Snonaka 9150517e57Snonaka #define OID_TCP_OFFLOAD_PARAMETERS 0xFC01020C 92391c7a73Snonaka #define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020D 9350517e57Snonaka 9455c94440Snonaka #define RNDIS_MEDIUM_802_3 0x00000000 9555c94440Snonaka 9655c94440Snonaka #define RNDIS_MAJOR_VERSION 0x00000001U 9755c94440Snonaka #define RNDIS_MINOR_VERSION 0x00000000U 9855c94440Snonaka 9955c94440Snonaka /* Device flags */ 10055c94440Snonaka #define RNDIS_DF_CONNECTIONLESS 0x00000001 10155c94440Snonaka #define RNDIS_DF_CONNECTION_ORIENTED 0x00000002 10255c94440Snonaka 10355c94440Snonaka /* 10450517e57Snonaka * Common RNDIS message header. 10550517e57Snonaka */ 10650517e57Snonaka struct rndis_msghdr { 10750517e57Snonaka uint32_t rm_type; 10850517e57Snonaka uint32_t rm_len; 10950517e57Snonaka }; 11050517e57Snonaka 11150517e57Snonaka /* 11255c94440Snonaka * RNDIS data message 11355c94440Snonaka */ 11455c94440Snonaka #define REMOTE_NDIS_PACKET_MSG 0x00000001 11555c94440Snonaka 11655c94440Snonaka 11755c94440Snonaka struct rndis_packet_msg { 11855c94440Snonaka uint32_t rm_type; 11955c94440Snonaka uint32_t rm_len; 12055c94440Snonaka uint32_t rm_dataoffset; 12155c94440Snonaka uint32_t rm_datalen; 12255c94440Snonaka uint32_t rm_oobdataoffset; 12355c94440Snonaka uint32_t rm_oobdatalen; 12455c94440Snonaka uint32_t rm_oobdataelements; 12555c94440Snonaka uint32_t rm_pktinfooffset; 12655c94440Snonaka uint32_t rm_pktinfolen; 12755c94440Snonaka uint32_t rm_vchandle; 12855c94440Snonaka uint32_t rm_reserved; 12955c94440Snonaka }; 13055c94440Snonaka 13150517e57Snonaka /* Per-packet-info for RNDIS data message */ 13250517e57Snonaka struct rndis_pktinfo { 13350517e57Snonaka uint32_t rm_size; 13450517e57Snonaka uint32_t rm_type; 13550517e57Snonaka uint32_t rm_pktinfooffset; 13650517e57Snonaka uint8_t rm_data[0]; 13750517e57Snonaka }; 13850517e57Snonaka 13950517e57Snonaka #define NDIS_PKTINFO_TYPE_CSUM 0 14050517e57Snonaka #define NDIS_PKTINFO_TYPE_IPSEC 1 14150517e57Snonaka #define NDIS_PKTINFO_TYPE_LSO 2 14250517e57Snonaka #define NDIS_PKTINFO_TYPE_CLASSIFY 3 14350517e57Snonaka /* reserved 4 */ 14450517e57Snonaka #define NDIS_PKTINFO_TYPE_SGLIST 5 14550517e57Snonaka #define NDIS_PKTINFO_TYPE_VLAN 6 14650517e57Snonaka #define NDIS_PKTINFO_TYPE_ORIG 7 14750517e57Snonaka #define NDIS_PKTINFO_TYPE_PKT_CANCELID 8 14850517e57Snonaka #define NDIS_PKTINFO_TYPE_ORIG_NBLIST 9 14950517e57Snonaka #define NDIS_PKTINFO_TYPE_CACHE_NBLIST 10 15050517e57Snonaka #define NDIS_PKTINFO_TYPE_PKT_PAD 11 15150517e57Snonaka 15255c94440Snonaka /* 15355c94440Snonaka * RNDIS control messages 15455c94440Snonaka */ 15555c94440Snonaka struct rndis_comp_hdr { 15655c94440Snonaka uint32_t rm_type; 15755c94440Snonaka uint32_t rm_len; 15855c94440Snonaka uint32_t rm_rid; 15955c94440Snonaka uint32_t rm_status; 16055c94440Snonaka }; 16155c94440Snonaka 16255c94440Snonaka /* Initialize the device. */ 16355c94440Snonaka #define REMOTE_NDIS_INITIALIZE_MSG 0x00000002 16455c94440Snonaka #define REMOTE_NDIS_INITIALIZE_CMPLT 0x80000002 16555c94440Snonaka 16655c94440Snonaka struct rndis_init_req { 16755c94440Snonaka uint32_t rm_type; 16855c94440Snonaka uint32_t rm_len; 16955c94440Snonaka uint32_t rm_rid; 17055c94440Snonaka uint32_t rm_ver_major; 17155c94440Snonaka uint32_t rm_ver_minor; 17255c94440Snonaka uint32_t rm_max_xfersz; 17355c94440Snonaka }; 17455c94440Snonaka 17555c94440Snonaka struct rndis_init_comp { 17655c94440Snonaka uint32_t rm_type; 17755c94440Snonaka uint32_t rm_len; 17855c94440Snonaka uint32_t rm_rid; 17955c94440Snonaka uint32_t rm_status; 18055c94440Snonaka uint32_t rm_ver_major; 18155c94440Snonaka uint32_t rm_ver_minor; 18255c94440Snonaka uint32_t rm_devflags; 18355c94440Snonaka uint32_t rm_medium; 18455c94440Snonaka uint32_t rm_pktmaxcnt; 18555c94440Snonaka uint32_t rm_pktmaxsz; 18655c94440Snonaka uint32_t rm_align; 18755c94440Snonaka uint32_t rm_aflistoffset; 18855c94440Snonaka uint32_t rm_aflistsz; 18955c94440Snonaka }; 19055c94440Snonaka 19155c94440Snonaka /* Halt the device. No response sent. */ 19255c94440Snonaka #define REMOTE_NDIS_HALT_MSG 0x00000003 19355c94440Snonaka 19455c94440Snonaka struct rndis_halt_req { 19555c94440Snonaka uint32_t rm_type; 19655c94440Snonaka uint32_t rm_len; 19755c94440Snonaka uint32_t rm_rid; 19855c94440Snonaka }; 19955c94440Snonaka 20055c94440Snonaka /* Send a query object. */ 20155c94440Snonaka #define REMOTE_NDIS_QUERY_MSG 0x00000004 20255c94440Snonaka #define REMOTE_NDIS_QUERY_CMPLT 0x80000004 20355c94440Snonaka 20455c94440Snonaka struct rndis_query_req { 20555c94440Snonaka uint32_t rm_type; 20655c94440Snonaka uint32_t rm_len; 20755c94440Snonaka uint32_t rm_rid; 20855c94440Snonaka uint32_t rm_oid; 20955c94440Snonaka uint32_t rm_infobuflen; 21055c94440Snonaka uint32_t rm_infobufoffset; 21155c94440Snonaka uint32_t rm_devicevchdl; 21255c94440Snonaka }; 21355c94440Snonaka 21455c94440Snonaka struct rndis_query_comp { 21555c94440Snonaka uint32_t rm_type; 21655c94440Snonaka uint32_t rm_len; 21755c94440Snonaka uint32_t rm_rid; 21855c94440Snonaka uint32_t rm_status; 21955c94440Snonaka uint32_t rm_infobuflen; 22055c94440Snonaka uint32_t rm_infobufoffset; 22155c94440Snonaka }; 22255c94440Snonaka 22355c94440Snonaka /* Send a set object request. */ 22455c94440Snonaka #define REMOTE_NDIS_SET_MSG 0x00000005 22555c94440Snonaka #define REMOTE_NDIS_SET_CMPLT 0x80000005 22655c94440Snonaka 22755c94440Snonaka struct rndis_set_req { 22855c94440Snonaka uint32_t rm_type; 22955c94440Snonaka uint32_t rm_len; 23055c94440Snonaka uint32_t rm_rid; 23155c94440Snonaka uint32_t rm_oid; 23255c94440Snonaka uint32_t rm_infobuflen; 23355c94440Snonaka uint32_t rm_infobufoffset; 23455c94440Snonaka uint32_t rm_devicevchdl; 23555c94440Snonaka }; 23655c94440Snonaka 23755c94440Snonaka struct rndis_set_comp { 23855c94440Snonaka uint32_t rm_type; 23955c94440Snonaka uint32_t rm_len; 24055c94440Snonaka uint32_t rm_rid; 24155c94440Snonaka uint32_t rm_status; 24255c94440Snonaka }; 24355c94440Snonaka 24455c94440Snonaka #define REMOTE_NDIS_SET_PARAM_NUMERIC 0x00000000 24555c94440Snonaka #define REMOTE_NDIS_SET_PARAM_STRING 0x00000002 24655c94440Snonaka 24755c94440Snonaka struct rndis_set_parameter { 24855c94440Snonaka uint32_t rm_nameoffset; 24955c94440Snonaka uint32_t rm_namelen; 25055c94440Snonaka uint32_t rm_type; 25155c94440Snonaka uint32_t rm_valueoffset; 25255c94440Snonaka uint32_t rm_valuelen; 25355c94440Snonaka }; 25455c94440Snonaka 25555c94440Snonaka /* Perform a soft reset on the device. */ 25655c94440Snonaka #define REMOTE_NDIS_RESET_MSG 0x00000006 25755c94440Snonaka #define REMOTE_NDIS_RESET_CMPLT 0x80000006 25855c94440Snonaka 25955c94440Snonaka struct rndis_reset_req { 26055c94440Snonaka uint32_t rm_type; 26155c94440Snonaka uint32_t rm_len; 26255c94440Snonaka uint32_t rm_rid; 26355c94440Snonaka }; 26455c94440Snonaka 26555c94440Snonaka struct rndis_reset_comp { 26655c94440Snonaka uint32_t rm_type; 26755c94440Snonaka uint32_t rm_len; 26855c94440Snonaka uint32_t rm_status; 26955c94440Snonaka uint32_t rm_adrreset; 27055c94440Snonaka }; 27155c94440Snonaka 27255c94440Snonaka /* 802.3 link-state or undefined message error. */ 27355c94440Snonaka #define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007 27455c94440Snonaka 275fcd2c8f2Smaya struct rndis_status_msg { 276fcd2c8f2Smaya uint32_t rm_type; 277fcd2c8f2Smaya uint32_t rm_len; 278fcd2c8f2Smaya uint32_t rm_status; 279fcd2c8f2Smaya uint32_t rm_stbuflen; 280fcd2c8f2Smaya uint32_t rm_stbufoffset; 281fcd2c8f2Smaya /* rndis_diag_info */ 282fcd2c8f2Smaya }; 283fcd2c8f2Smaya 284*2e0bf311Sandvar /* Keepalive message. May be sent by device. */ 28555c94440Snonaka #define REMOTE_NDIS_KEEPALIVE_MSG 0x00000008 28655c94440Snonaka #define REMOTE_NDIS_KEEPALIVE_CMPLT 0x80000008 28755c94440Snonaka 28855c94440Snonaka struct rndis_keepalive_req { 28955c94440Snonaka uint32_t rm_type; 29055c94440Snonaka uint32_t rm_len; 29155c94440Snonaka uint32_t rm_rid; 29255c94440Snonaka }; 29355c94440Snonaka 29455c94440Snonaka struct rndis_keepalive_comp { 29555c94440Snonaka uint32_t rm_type; 29655c94440Snonaka uint32_t rm_len; 29755c94440Snonaka uint32_t rm_rid; 29855c94440Snonaka uint32_t rm_status; 29955c94440Snonaka }; 30055c94440Snonaka 30155c94440Snonaka /* packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */ 30255c94440Snonaka #define RNDIS_PACKET_TYPE_DIRECTED 0x00000001 30355c94440Snonaka #define RNDIS_PACKET_TYPE_MULTICAST 0x00000002 30455c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 30555c94440Snonaka #define RNDIS_PACKET_TYPE_BROADCAST 0x00000008 30655c94440Snonaka #define RNDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 30755c94440Snonaka #define RNDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 30855c94440Snonaka #define RNDIS_PACKET_TYPE_SMT 0x00000040 30955c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 31055c94440Snonaka #define RNDIS_PACKET_TYPE_GROUP 0x00001000 31155c94440Snonaka #define RNDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000 31255c94440Snonaka #define RNDIS_PACKET_TYPE_FUNCTIONAL 0x00004000 31355c94440Snonaka #define RNDIS_PACKET_TYPE_MAC_FRAME 0x00008000 31455c94440Snonaka 31555c94440Snonaka /* Rndis offsets */ 31650517e57Snonaka #define RNDIS_HEADER_OFFSET (sizeof(struct rndis_msghdr)) 31755c94440Snonaka #define RNDIS_DATA_OFFSET (sizeof(struct rndis_packet_msg) - \ 31850517e57Snonaka RNDIS_HEADER_OFFSET) 31955c94440Snonaka 32055c94440Snonaka #endif /* _DEV_IC_RNDISREG_H_ */ 321