The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/rndis.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $FreeBSD: releng/11.1/sys/net/rndis.h 308623 2016-11-14 03:14:43Z sephe $ */
    2 /*      $OpenBSD: if_urndisreg.h,v 1.19 2013/11/21 14:08:05 mpi Exp $ */
    3 
    4 /*
    5  * Copyright (c) 2010 Jonathan Armani <armani@openbsd.org>
    6  * Copyright (c) 2010 Fabien Romano <fabien@openbsd.org>
    7  * Copyright (c) 2010 Michael Knudsen <mk@openbsd.org>
    8  * All rights reserved.
    9  *
   10  * Permission to use, copy, modify, and distribute this software for any
   11  * purpose with or without fee is hereby granted, provided that the above
   12  * copyright notice and this permission notice appear in all copies.
   13  *
   14  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   15  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   16  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   17  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   18  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   19  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   20  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   21  */
   22 
   23 #ifndef _NET_RNDIS_H_
   24 #define _NET_RNDIS_H_
   25 
   26 /* Canonical major/minor version as of 22th Aug. 2016. */
   27 #define RNDIS_VERSION_MAJOR             0x00000001
   28 #define RNDIS_VERSION_MINOR             0x00000000
   29 
   30 #define RNDIS_STATUS_SUCCESS            0x00000000L
   31 #define RNDIS_STATUS_PENDING            0x00000103L
   32 #define RNDIS_STATUS_MEDIA_CONNECT      0x4001000BL
   33 #define RNDIS_STATUS_MEDIA_DISCONNECT   0x4001000CL
   34 #define RNDIS_STATUS_NETWORK_CHANGE     0x40010018L
   35 #define RNDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG        0x40020006L
   36 #define RNDIS_STATUS_BUFFER_OVERFLOW    0x80000005L
   37 #define RNDIS_STATUS_FAILURE            0xC0000001L
   38 #define RNDIS_STATUS_NOT_SUPPORTED      0xC00000BBL
   39 #define RNDIS_STATUS_RESOURCES          0xC000009AL
   40 #define RNDIS_STATUS_INVALID_DATA       0xC0010015L
   41 
   42 #define OID_GEN_SUPPORTED_LIST          0x00010101
   43 #define OID_GEN_HARDWARE_STATUS         0x00010102
   44 #define OID_GEN_MEDIA_SUPPORTED         0x00010103
   45 #define OID_GEN_MEDIA_IN_USE            0x00010104
   46 #define OID_GEN_MAXIMUM_LOOKAHEAD       0x00010105
   47 #define OID_GEN_MAXIMUM_FRAME_SIZE      0x00010106
   48 #define OID_GEN_LINK_SPEED              0x00010107
   49 #define OID_GEN_TRANSMIT_BUFFER_SPACE   0x00010108
   50 #define OID_GEN_RECEIVE_BUFFER_SPACE    0x00010109
   51 #define OID_GEN_TRANSMIT_BLOCK_SIZE     0x0001010A
   52 #define OID_GEN_RECEIVE_BLOCK_SIZE      0x0001010B
   53 #define OID_GEN_VENDOR_ID               0x0001010C
   54 #define OID_GEN_VENDOR_DESCRIPTION      0x0001010D
   55 #define OID_GEN_CURRENT_PACKET_FILTER   0x0001010E
   56 #define OID_GEN_CURRENT_LOOKAHEAD       0x0001010F
   57 #define OID_GEN_DRIVER_VERSION          0x00010110
   58 #define OID_GEN_MAXIMUM_TOTAL_SIZE      0x00010111
   59 #define OID_GEN_PROTOCOL_OPTIONS        0x00010112
   60 #define OID_GEN_MAC_OPTIONS             0x00010113
   61 #define OID_GEN_MEDIA_CONNECT_STATUS    0x00010114
   62 #define OID_GEN_MAXIMUM_SEND_PACKETS    0x00010115
   63 #define OID_GEN_VENDOR_DRIVER_VERSION   0x00010116
   64 #define OID_GEN_SUPPORTED_GUIDS         0x00010117
   65 #define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118
   66 #define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119
   67 #define OID_GEN_RECEIVE_SCALE_CAPABILITIES      0x00010203
   68 #define OID_GEN_RECEIVE_SCALE_PARAMETERS        0x00010204
   69 #define OID_GEN_MACHINE_NAME            0x0001021A
   70 #define OID_GEN_RNDIS_CONFIG_PARAMETER  0x0001021B
   71 #define OID_GEN_VLAN_ID                 0x0001021C
   72 
   73 #define OID_802_3_PERMANENT_ADDRESS     0x01010101
   74 #define OID_802_3_CURRENT_ADDRESS       0x01010102
   75 #define OID_802_3_MULTICAST_LIST        0x01010103
   76 #define OID_802_3_MAXIMUM_LIST_SIZE     0x01010104
   77 #define OID_802_3_MAC_OPTIONS           0x01010105
   78 #define OID_802_3_RCV_ERROR_ALIGNMENT   0x01020101
   79 #define OID_802_3_XMIT_ONE_COLLISION    0x01020102
   80 #define OID_802_3_XMIT_MORE_COLLISIONS  0x01020103
   81 #define OID_802_3_XMIT_DEFERRED         0x01020201
   82 #define OID_802_3_XMIT_MAX_COLLISIONS   0x01020202
   83 #define OID_802_3_RCV_OVERRUN           0x01020203
   84 #define OID_802_3_XMIT_UNDERRUN         0x01020204
   85 #define OID_802_3_XMIT_HEARTBEAT_FAILURE        0x01020205
   86 #define OID_802_3_XMIT_TIMES_CRS_LOST   0x01020206
   87 #define OID_802_3_XMIT_LATE_COLLISIONS  0x01020207
   88 
   89 #define OID_TCP_OFFLOAD_PARAMETERS      0xFC01020C
   90 #define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES   0xFC01020D
   91 
   92 #define RNDIS_MEDIUM_802_3              0x00000000
   93 
   94 /* Device flags */
   95 #define RNDIS_DF_CONNECTIONLESS         0x00000001
   96 #define RNDIS_DF_CONNECTION_ORIENTED    0x00000002
   97 
   98 /*
   99  * Common RNDIS message header.
  100  */
  101 struct rndis_msghdr {
  102         uint32_t rm_type;
  103         uint32_t rm_len;
  104 };
  105 
  106 /*
  107  * RNDIS data message
  108  */
  109 #define REMOTE_NDIS_PACKET_MSG          0x00000001
  110 
  111 struct rndis_packet_msg {
  112         uint32_t rm_type;
  113         uint32_t rm_len;
  114         uint32_t rm_dataoffset;
  115         uint32_t rm_datalen;
  116         uint32_t rm_oobdataoffset;
  117         uint32_t rm_oobdatalen;
  118         uint32_t rm_oobdataelements;
  119         uint32_t rm_pktinfooffset;
  120         uint32_t rm_pktinfolen;
  121         uint32_t rm_vchandle;
  122         uint32_t rm_reserved;
  123 };
  124 
  125 /*
  126  * Minimum value for rm_dataoffset, rm_oobdataoffset, and
  127  * rm_pktinfooffset.
  128  */
  129 #define RNDIS_PACKET_MSG_OFFSET_MIN             \
  130         (sizeof(struct rndis_packet_msg) -      \
  131          __offsetof(struct rndis_packet_msg, rm_dataoffset))
  132 
  133 /* Offset from the beginning of rndis_packet_msg. */
  134 #define RNDIS_PACKET_MSG_OFFSET_ABS(ofs)        \
  135         ((ofs) + __offsetof(struct rndis_packet_msg, rm_dataoffset))
  136 
  137 #define RNDIS_PACKET_MSG_OFFSET_ALIGN           4
  138 #define RNDIS_PACKET_MSG_OFFSET_ALIGNMASK       \
  139         (RNDIS_PACKET_MSG_OFFSET_ALIGN - 1)
  140 
  141 /* Per-packet-info for RNDIS data message */
  142 struct rndis_pktinfo {
  143         uint32_t rm_size;
  144         uint32_t rm_type;               /* NDIS_PKTINFO_TYPE_ */
  145         uint32_t rm_pktinfooffset;
  146         uint8_t rm_data[];
  147 };
  148 
  149 #define RNDIS_PKTINFO_OFFSET            \
  150         __offsetof(struct rndis_pktinfo, rm_data[0])
  151 #define RNDIS_PKTINFO_SIZE_ALIGN        4
  152 #define RNDIS_PKTINFO_SIZE_ALIGNMASK    (RNDIS_PKTINFO_SIZE_ALIGN - 1)
  153 
  154 #define NDIS_PKTINFO_TYPE_CSUM          0
  155 #define NDIS_PKTINFO_TYPE_IPSEC         1
  156 #define NDIS_PKTINFO_TYPE_LSO           2
  157 #define NDIS_PKTINFO_TYPE_CLASSIFY      3
  158 /* reserved 4 */
  159 #define NDIS_PKTINFO_TYPE_SGLIST        5
  160 #define NDIS_PKTINFO_TYPE_VLAN          6
  161 #define NDIS_PKTINFO_TYPE_ORIG          7
  162 #define NDIS_PKTINFO_TYPE_PKT_CANCELID  8
  163 #define NDIS_PKTINFO_TYPE_ORIG_NBLIST   9
  164 #define NDIS_PKTINFO_TYPE_CACHE_NBLIST  10
  165 #define NDIS_PKTINFO_TYPE_PKT_PAD       11
  166 
  167 /*
  168  * RNDIS control messages
  169  */
  170 
  171 /*
  172  * Common header for RNDIS completion messages.
  173  *
  174  * NOTE: It does not apply to REMOTE_NDIS_RESET_CMPLT.
  175  */
  176 struct rndis_comp_hdr {
  177         uint32_t rm_type;
  178         uint32_t rm_len;
  179         uint32_t rm_rid;
  180         uint32_t rm_status;
  181 };
  182 
  183 /* Initialize the device. */
  184 #define REMOTE_NDIS_INITIALIZE_MSG      0x00000002
  185 #define REMOTE_NDIS_INITIALIZE_CMPLT    0x80000002
  186 
  187 struct rndis_init_req {
  188         uint32_t rm_type;
  189         uint32_t rm_len;
  190         uint32_t rm_rid;
  191         uint32_t rm_ver_major;
  192         uint32_t rm_ver_minor;
  193         uint32_t rm_max_xfersz;
  194 };
  195 
  196 struct rndis_init_comp {
  197         uint32_t rm_type;
  198         uint32_t rm_len;
  199         uint32_t rm_rid;
  200         uint32_t rm_status;
  201         uint32_t rm_ver_major;
  202         uint32_t rm_ver_minor;
  203         uint32_t rm_devflags;
  204         uint32_t rm_medium;
  205         uint32_t rm_pktmaxcnt;
  206         uint32_t rm_pktmaxsz;
  207         uint32_t rm_align;
  208         uint32_t rm_aflistoffset;
  209         uint32_t rm_aflistsz;
  210 };
  211 
  212 #define RNDIS_INIT_COMP_SIZE_MIN        \
  213         __offsetof(struct rndis_init_comp, rm_aflistsz)
  214 
  215 /* Halt the device.  No response sent. */
  216 #define REMOTE_NDIS_HALT_MSG            0x00000003
  217 
  218 struct rndis_halt_req {
  219         uint32_t rm_type;
  220         uint32_t rm_len;
  221         uint32_t rm_rid;
  222 };
  223 
  224 /* Send a query object. */
  225 #define REMOTE_NDIS_QUERY_MSG           0x00000004
  226 #define REMOTE_NDIS_QUERY_CMPLT         0x80000004
  227 
  228 struct rndis_query_req {
  229         uint32_t rm_type;
  230         uint32_t rm_len;
  231         uint32_t rm_rid;
  232         uint32_t rm_oid;
  233         uint32_t rm_infobuflen;
  234         uint32_t rm_infobufoffset;
  235         uint32_t rm_devicevchdl;
  236 };
  237 
  238 #define RNDIS_QUERY_REQ_INFOBUFOFFSET           \
  239         (sizeof(struct rndis_query_req) -       \
  240          __offsetof(struct rndis_query_req, rm_rid))
  241 
  242 struct rndis_query_comp {
  243         uint32_t rm_type;
  244         uint32_t rm_len;
  245         uint32_t rm_rid;
  246         uint32_t rm_status;
  247         uint32_t rm_infobuflen;
  248         uint32_t rm_infobufoffset;
  249 };
  250 
  251 /* infobuf offset from the beginning of rndis_query_comp. */
  252 #define RNDIS_QUERY_COMP_INFOBUFOFFSET_ABS(ofs) \
  253         ((ofs) + __offsetof(struct rndis_query_req, rm_rid))
  254 
  255 /* Send a set object request. */
  256 #define REMOTE_NDIS_SET_MSG             0x00000005
  257 #define REMOTE_NDIS_SET_CMPLT           0x80000005
  258 
  259 struct rndis_set_req {
  260         uint32_t rm_type;
  261         uint32_t rm_len;
  262         uint32_t rm_rid;
  263         uint32_t rm_oid;
  264         uint32_t rm_infobuflen;
  265         uint32_t rm_infobufoffset;
  266         uint32_t rm_devicevchdl;
  267 };
  268 
  269 #define RNDIS_SET_REQ_INFOBUFOFFSET             \
  270         (sizeof(struct rndis_set_req) -         \
  271          __offsetof(struct rndis_set_req, rm_rid))
  272 
  273 struct rndis_set_comp {
  274         uint32_t rm_type;
  275         uint32_t rm_len;
  276         uint32_t rm_rid;
  277         uint32_t rm_status;
  278 };
  279 
  280 /*
  281  * Parameter used by OID_GEN_RNDIS_CONFIG_PARAMETER.
  282  */
  283 #define REMOTE_NDIS_SET_PARAM_NUMERIC   0x00000000
  284 #define REMOTE_NDIS_SET_PARAM_STRING    0x00000002
  285 
  286 struct rndis_set_parameter {
  287         uint32_t rm_nameoffset;
  288         uint32_t rm_namelen;
  289         uint32_t rm_type;
  290         uint32_t rm_valueoffset;
  291         uint32_t rm_valuelen;
  292 };
  293 
  294 /* Perform a soft reset on the device. */
  295 #define REMOTE_NDIS_RESET_MSG           0x00000006
  296 #define REMOTE_NDIS_RESET_CMPLT         0x80000006
  297 
  298 struct rndis_reset_req {
  299         uint32_t rm_type;
  300         uint32_t rm_len;
  301         uint32_t rm_rid;
  302 };
  303 
  304 struct rndis_reset_comp {
  305         uint32_t rm_type;
  306         uint32_t rm_len;
  307         uint32_t rm_status;
  308         uint32_t rm_adrreset;
  309 };
  310 
  311 /* 802.3 link-state or undefined message error.  Sent by device. */
  312 #define REMOTE_NDIS_INDICATE_STATUS_MSG 0x00000007
  313 
  314 struct rndis_status_msg {
  315         uint32_t rm_type;
  316         uint32_t rm_len;
  317         uint32_t rm_status;
  318         uint32_t rm_stbuflen;
  319         uint32_t rm_stbufoffset;
  320         /* rndis_diag_info */
  321 };
  322 
  323 /* stbuf offset from the beginning of rndis_status_msg. */
  324 #define RNDIS_STBUFOFFSET_ABS(ofs)      \
  325         ((ofs) + __offsetof(struct rndis_status_msg, rm_status))
  326 
  327 /*
  328  * Immediately after rndis_status_msg.rm_stbufoffset, if a control
  329  * message is malformatted, or a packet message contains inappropriate
  330  * content.
  331  */
  332 struct rndis_diag_info {
  333         uint32_t rm_diagstatus;
  334         uint32_t rm_erroffset;
  335 };
  336 
  337 /* Keepalive messsage.  May be sent by device. */
  338 #define REMOTE_NDIS_KEEPALIVE_MSG       0x00000008
  339 #define REMOTE_NDIS_KEEPALIVE_CMPLT     0x80000008
  340 
  341 struct rndis_keepalive_req {
  342         uint32_t rm_type;
  343         uint32_t rm_len;
  344         uint32_t rm_rid;
  345 };
  346 
  347 struct rndis_keepalive_comp {
  348         uint32_t rm_type;
  349         uint32_t rm_len;
  350         uint32_t rm_rid;
  351         uint32_t rm_status;
  352 };
  353 
  354 /* Packet filter bits used by OID_GEN_CURRENT_PACKET_FILTER */
  355 #define NDIS_PACKET_TYPE_NONE                   0x00000000
  356 #define NDIS_PACKET_TYPE_DIRECTED               0x00000001
  357 #define NDIS_PACKET_TYPE_MULTICAST              0x00000002
  358 #define NDIS_PACKET_TYPE_ALL_MULTICAST          0x00000004
  359 #define NDIS_PACKET_TYPE_BROADCAST              0x00000008
  360 #define NDIS_PACKET_TYPE_SOURCE_ROUTING         0x00000010
  361 #define NDIS_PACKET_TYPE_PROMISCUOUS            0x00000020
  362 #define NDIS_PACKET_TYPE_SMT                    0x00000040
  363 #define NDIS_PACKET_TYPE_ALL_LOCAL              0x00000080
  364 #define NDIS_PACKET_TYPE_GROUP                  0x00001000
  365 #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL         0x00002000
  366 #define NDIS_PACKET_TYPE_FUNCTIONAL             0x00004000
  367 #define NDIS_PACKET_TYPE_MAC_FRAME              0x00008000
  368 
  369 /*
  370  * Packet filter description for use with printf(9) %b identifier.
  371  */
  372 #define NDIS_PACKET_TYPES                               \
  373         "\2\1DIRECT\2MULTICAST\3ALLMULTI\4BROADCAST"   \
  374         "\5SRCROUTE\6PROMISC\7SMT\10ALLLOCAL"           \
  375         "\11GROUP\12ALLFUNC\13FUNC\14MACFRAME"
  376 
  377 /* RNDIS offsets */
  378 #define RNDIS_HEADER_OFFSET     ((uint32_t)sizeof(struct rndis_msghdr))
  379 #define RNDIS_DATA_OFFSET       \
  380     ((uint32_t)(sizeof(struct rndis_packet_msg) - RNDIS_HEADER_OFFSET))
  381 
  382 #endif  /* !_NET_RNDIS_H_ */

Cache object: d36d025d9e702fb54b16a042d7716a7e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.