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

Cache object: d392879f5c51e59fa30f52b0405a20f6


[ 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.