Index: head/sys/dev/hyperv/netvsc/hv_net_vsc.h =================================================================== --- head/sys/dev/hyperv/netvsc/hv_net_vsc.h +++ head/sys/dev/hyperv/netvsc/hv_net_vsc.h @@ -74,110 +74,6 @@ #define NVSP_PROTOCOL_VERSION_2 0x30002 #define NVSP_PROTOCOL_VERSION_4 0x40000 #define NVSP_PROTOCOL_VERSION_5 0x50000 -#define NVSP_MIN_PROTOCOL_VERSION (NVSP_PROTOCOL_VERSION_1) -#define NVSP_MAX_PROTOCOL_VERSION (NVSP_PROTOCOL_VERSION_2) - -#define NVSP_PROTOCOL_VERSION_CURRENT NVSP_PROTOCOL_VERSION_2 - -#define VERSION_4_OFFLOAD_SIZE 22 - -#define NVSP_OPERATIONAL_STATUS_OK (0x00000000) -#define NVSP_OPERATIONAL_STATUS_DEGRADED (0x00000001) -#define NVSP_OPERATIONAL_STATUS_NONRECOVERABLE (0x00000002) -#define NVSP_OPERATIONAL_STATUS_NO_CONTACT (0x00000003) -#define NVSP_OPERATIONAL_STATUS_LOST_COMMUNICATION (0x00000004) - -/* - * Maximun number of transfer pages (packets) the VSP will use on a receive - */ -#define NVSP_MAX_PACKETS_PER_RECEIVE 375 - -/* vRSS stuff */ -#define RNDIS_OBJECT_TYPE_RSS_CAPABILITIES 0x88 -#define RNDIS_OBJECT_TYPE_RSS_PARAMETERS 0x89 - -#define RNDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2 2 -#define RNDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 2 - -struct rndis_obj_header { - uint8_t type; - uint8_t rev; - uint16_t size; -} __packed; - -/* rndis_recv_scale_cap/cap_flag */ -#define RNDIS_RSS_CAPS_MESSAGE_SIGNALED_INTERRUPTS 0x01000000 -#define RNDIS_RSS_CAPS_CLASSIFICATION_AT_ISR 0x02000000 -#define RNDIS_RSS_CAPS_CLASSIFICATION_AT_DPC 0x04000000 -#define RNDIS_RSS_CAPS_USING_MSI_X 0x08000000 -#define RNDIS_RSS_CAPS_RSS_AVAILABLE_ON_PORTS 0x10000000 -#define RNDIS_RSS_CAPS_SUPPORTS_MSI_X 0x20000000 -#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV4 0x00000100 -#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6 0x00000200 -#define RNDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX 0x00000400 - -/* RNDIS_RECEIVE_SCALE_CAPABILITIES */ -struct rndis_recv_scale_cap { - struct rndis_obj_header hdr; - uint32_t cap_flag; - uint32_t num_int_msg; - uint32_t num_recv_que; - uint16_t num_indirect_tabent; -} __packed; - -/* rndis_recv_scale_param flags */ -#define RNDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED 0x0001 -#define RNDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED 0x0002 -#define RNDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED 0x0004 -#define RNDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED 0x0008 -#define RNDIS_RSS_PARAM_FLAG_DISABLE_RSS 0x0010 - -/* Hash info bits */ -#define RNDIS_HASH_FUNC_TOEPLITZ 0x00000001 -#define RNDIS_HASH_IPV4 0x00000100 -#define RNDIS_HASH_TCP_IPV4 0x00000200 -#define RNDIS_HASH_IPV6 0x00000400 -#define RNDIS_HASH_IPV6_EX 0x00000800 -#define RNDIS_HASH_TCP_IPV6 0x00001000 -#define RNDIS_HASH_TCP_IPV6_EX 0x00002000 - -#define RNDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_2 (128 * 4) -#define RNDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2 40 - -#define ITAB_NUM 128 -#define HASH_KEYLEN RNDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2 - -/* RNDIS_RECEIVE_SCALE_PARAMETERS */ -typedef struct rndis_recv_scale_param_ { - struct rndis_obj_header hdr; - - /* Qualifies the rest of the information */ - uint16_t flag; - - /* The base CPU number to do receive processing. not used */ - uint16_t base_cpu_number; - - /* This describes the hash function and type being enabled */ - uint32_t hashinfo; - - /* The size of indirection table array */ - uint16_t indirect_tabsize; - - /* The offset of the indirection table from the beginning of this - * structure - */ - uint32_t indirect_taboffset; - - /* The size of the hash secret key */ - uint16_t hashkey_size; - - /* The offset of the secret key from the beginning of this structure */ - uint32_t hashkey_offset; - - uint32_t processor_masks_offset; - uint32_t num_processor_masks; - uint32_t processor_masks_entry_size; -} rndis_recv_scale_param; /* * The following arguably belongs in a separate header file @@ -188,18 +84,10 @@ */ #define NETVSC_SEND_BUFFER_SIZE (1024*1024*15) /* 15M */ -#define NETVSC_SEND_BUFFER_ID 0xface #define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */ #define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */ -#define NETVSC_RECEIVE_BUFFER_ID 0xcafe - -#define NETVSC_RECEIVE_SG_COUNT 1 - -/* Preallocated receive packets */ -#define NETVSC_RECEIVE_PACKETLIST_COUNT 256 - /* * Maximum MTU we permit to be configured for a netvsc interface. * When the code was developed, a max MTU of 12232 was tested and @@ -208,7 +96,6 @@ #define NETVSC_MAX_CONFIGURABLE_MTU (9 * 1024) #define NETVSC_PACKET_SIZE PAGE_SIZE -#define VRSS_SEND_TABLE_SIZE 16 /* * Data types @@ -216,26 +103,9 @@ struct vmbus_channel; -typedef void (*pfn_on_send_rx_completion)(struct vmbus_channel *, void *); - #define NETVSC_DEVICE_RING_BUFFER_SIZE (128 * PAGE_SIZE) #define NETVSC_PACKET_MAXPAGE 32 -#define NETVSC_VLAN_PRIO_MASK 0xe000 -#define NETVSC_VLAN_PRIO_SHIFT 13 -#define NETVSC_VLAN_VID_MASK 0x0fff - -#define TYPE_IPV4 2 -#define TYPE_IPV6 4 -#define TYPE_TCP 2 -#define TYPE_UDP 4 - -#define TRANSPORT_TYPE_NOT_IP 0 -#define TRANSPORT_TYPE_IPV4_TCP ((TYPE_IPV4 << 16) | TYPE_TCP) -#define TRANSPORT_TYPE_IPV4_UDP ((TYPE_IPV4 << 16) | TYPE_UDP) -#define TRANSPORT_TYPE_IPV6_TCP ((TYPE_IPV6 << 16) | TYPE_TCP) -#define TRANSPORT_TYPE_IPV6_UDP ((TYPE_IPV6 << 16) | TYPE_UDP) - typedef struct { uint8_t mac_addr[ETHER_ADDR_LEN]; uint32_t link_state; Index: head/sys/dev/hyperv/netvsc/hv_net_vsc.c =================================================================== --- head/sys/dev/hyperv/netvsc/hv_net_vsc.c +++ head/sys/dev/hyperv/netvsc/hv_net_vsc.c @@ -48,9 +48,9 @@ #include #include #include -#include #include #include +#include MALLOC_DEFINE(M_NETVSC, "netvsc", "Hyper-V netvsc driver"); @@ -513,15 +513,15 @@ for (i = protocol_number - 1; i >= 0; i--) { if (hv_nv_negotiate_nvsp_protocol(sc, protocol_list[i]) == 0) { sc->hn_nvs_ver = protocol_list[i]; - sc->hn_ndis_ver = NDIS_VERSION_6_30; + sc->hn_ndis_ver = HN_NDIS_VERSION_6_30; if (sc->hn_nvs_ver <= NVSP_PROTOCOL_VERSION_4) - sc->hn_ndis_ver = NDIS_VERSION_6_1; + sc->hn_ndis_ver = HN_NDIS_VERSION_6_1; if (bootverbose) { if_printf(sc->hn_ifp, "NVS version 0x%x, " "NDIS version %u.%u\n", sc->hn_nvs_ver, - NDIS_VERSION_MAJOR(sc->hn_ndis_ver), - NDIS_VERSION_MINOR(sc->hn_ndis_ver)); + HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver), + HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver)); } break; } @@ -547,8 +547,8 @@ memset(&ndis, 0, sizeof(ndis)); ndis.nvs_type = HN_NVS_TYPE_NDIS_INIT; - ndis.nvs_ndis_major = NDIS_VERSION_MAJOR(sc->hn_ndis_ver); - ndis.nvs_ndis_minor = NDIS_VERSION_MINOR(sc->hn_ndis_ver); + ndis.nvs_ndis_major = HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver); + ndis.nvs_ndis_minor = HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver); /* NOTE: No response. */ ret = hn_nvs_req_send(sc, &ndis, sizeof(ndis)); @@ -764,7 +764,7 @@ } pkt = (const struct vmbus_chanpkt_rxbuf *)pkthdr; - if (__predict_false(pkt->cp_rxbuf_id != NETVSC_RECEIVE_BUFFER_ID)) { + if (__predict_false(pkt->cp_rxbuf_id != HN_NVS_RXBUF_SIG)) { if_printf(rxr->hn_ifp, "invalid rxbuf_id 0x%08x\n", pkt->cp_rxbuf_id); return; Index: head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c =================================================================== --- head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c +++ head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c @@ -78,7 +78,7 @@ #include #include #include - +#include #include #include @@ -118,7 +118,6 @@ #include #include -#include #include #include @@ -827,7 +826,7 @@ } void -netvsc_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr) +hn_chan_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr) { #if defined(INET) || defined(INET6) tcp_lro_flush_all(&rxr->hn_lro); @@ -1263,7 +1262,7 @@ * Note: This is no longer used as a callback */ int -netvsc_recv(struct hn_rx_ring *rxr, const void *data, int dlen, +hn_rxpkt(struct hn_rx_ring *rxr, const void *data, int dlen, const struct hn_recvinfo *info) { struct ifnet *ifp = rxr->hn_ifp; @@ -2089,8 +2088,8 @@ char verstr[16]; snprintf(verstr, sizeof(verstr), "%u.%u", - NDIS_VERSION_MAJOR(sc->hn_ndis_ver), - NDIS_VERSION_MINOR(sc->hn_ndis_ver)); + HN_NDIS_VERSION_MAJOR(sc->hn_ndis_ver), + HN_NDIS_VERSION_MINOR(sc->hn_ndis_ver)); return sysctl_handle_string(oidp, verstr, sizeof(verstr), req); } Index: head/sys/dev/hyperv/netvsc/hv_rndis.h =================================================================== --- head/sys/dev/hyperv/netvsc/hv_rndis.h +++ head/sys/dev/hyperv/netvsc/hv_rndis.h @@ -1,892 +0,0 @@ -/*- - * Copyright (c) 2009-2012,2016 Microsoft Corp. - * Copyright (c) 2010-2012 Citrix Inc. - * Copyright (c) 2012 NetApp Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef __HV_RNDIS_H__ -#define __HV_RNDIS_H__ - -#include - -/* - * NDIS protocol version numbers - */ -#define NDIS_VERSION_5_0 0x00050000 -#define NDIS_VERSION_5_1 0x00050001 -#define NDIS_VERSION_6_0 0x00060000 -#define NDIS_VERSION_6_1 0x00060001 -#define NDIS_VERSION_6_30 0x0006001e - -#define NDIS_VERSION_MAJOR(ver) (((ver) & 0xffff0000) >> 16) -#define NDIS_VERSION_MINOR(ver) ((ver) & 0xffff) - -/* - * Object Identifiers used by NdisRequest Query/Set Information - */ - -/* - * General Objects - */ - -#define RNDIS_OID_GEN_SUPPORTED_LIST 0x00010101 -#define RNDIS_OID_GEN_HARDWARE_STATUS 0x00010102 -#define RNDIS_OID_GEN_MEDIA_SUPPORTED 0x00010103 -#define RNDIS_OID_GEN_MEDIA_IN_USE 0x00010104 -#define RNDIS_OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105 -#define RNDIS_OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106 -#define RNDIS_OID_GEN_LINK_SPEED 0x00010107 -#define RNDIS_OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108 -#define RNDIS_OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109 -#define RNDIS_OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010A -#define RNDIS_OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010B -#define RNDIS_OID_GEN_VENDOR_ID 0x0001010C -#define RNDIS_OID_GEN_VENDOR_DESCRIPTION 0x0001010D -#define RNDIS_OID_GEN_CURRENT_PACKET_FILTER 0x0001010E -#define RNDIS_OID_GEN_CURRENT_LOOKAHEAD 0x0001010F -#define RNDIS_OID_GEN_DRIVER_VERSION 0x00010110 -#define RNDIS_OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111 -#define RNDIS_OID_GEN_PROTOCOL_OPTIONS 0x00010112 -#define RNDIS_OID_GEN_MAC_OPTIONS 0x00010113 -#define RNDIS_OID_GEN_MEDIA_CONNECT_STATUS 0x00010114 -#define RNDIS_OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115 -#define RNDIS_OID_GEN_VENDOR_DRIVER_VERSION 0x00010116 -#define RNDIS_OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118 -#define RNDIS_OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119 -#define RNDIS_OID_GEN_MACHINE_NAME 0x0001021A -#define RNDIS_OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021B - -/* - * For receive side scale - */ -/* Query only */ -#define RNDIS_OID_GEN_RSS_CAPABILITIES 0x00010203 -/* Query and set */ -#define RNDIS_OID_GEN_RSS_PARAMETERS 0x00010204 - -#define RNDIS_OID_GEN_XMIT_OK 0x00020101 -#define RNDIS_OID_GEN_RCV_OK 0x00020102 -#define RNDIS_OID_GEN_XMIT_ERROR 0x00020103 -#define RNDIS_OID_GEN_RCV_ERROR 0x00020104 -#define RNDIS_OID_GEN_RCV_NO_BUFFER 0x00020105 - -#define RNDIS_OID_GEN_DIRECTED_BYTES_XMIT 0x00020201 -#define RNDIS_OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202 -#define RNDIS_OID_GEN_MULTICAST_BYTES_XMIT 0x00020203 -#define RNDIS_OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204 -#define RNDIS_OID_GEN_BROADCAST_BYTES_XMIT 0x00020205 -#define RNDIS_OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206 -#define RNDIS_OID_GEN_DIRECTED_BYTES_RCV 0x00020207 -#define RNDIS_OID_GEN_DIRECTED_FRAMES_RCV 0x00020208 -#define RNDIS_OID_GEN_MULTICAST_BYTES_RCV 0x00020209 -#define RNDIS_OID_GEN_MULTICAST_FRAMES_RCV 0x0002020A -#define RNDIS_OID_GEN_BROADCAST_BYTES_RCV 0x0002020B -#define RNDIS_OID_GEN_BROADCAST_FRAMES_RCV 0x0002020C - -#define RNDIS_OID_GEN_RCV_CRC_ERROR 0x0002020D -#define RNDIS_OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020E - -#define RNDIS_OID_GEN_GET_TIME_CAPS 0x0002020F -#define RNDIS_OID_GEN_GET_NETCARD_TIME 0x00020210 - -/* - * These are connection-oriented general OIDs. - * These replace the above OIDs for connection-oriented media. - */ -#define RNDIS_OID_GEN_CO_SUPPORTED_LIST 0x00010101 -#define RNDIS_OID_GEN_CO_HARDWARE_STATUS 0x00010102 -#define RNDIS_OID_GEN_CO_MEDIA_SUPPORTED 0x00010103 -#define RNDIS_OID_GEN_CO_MEDIA_IN_USE 0x00010104 -#define RNDIS_OID_GEN_CO_LINK_SPEED 0x00010105 -#define RNDIS_OID_GEN_CO_VENDOR_ID 0x00010106 -#define RNDIS_OID_GEN_CO_VENDOR_DESCRIPTION 0x00010107 -#define RNDIS_OID_GEN_CO_DRIVER_VERSION 0x00010108 -#define RNDIS_OID_GEN_CO_PROTOCOL_OPTIONS 0x00010109 -#define RNDIS_OID_GEN_CO_MAC_OPTIONS 0x0001010A -#define RNDIS_OID_GEN_CO_MEDIA_CONNECT_STATUS 0x0001010B -#define RNDIS_OID_GEN_CO_VENDOR_DRIVER_VERSION 0x0001010C -#define RNDIS_OID_GEN_CO_MINIMUM_LINK_SPEED 0x0001010D - -#define RNDIS_OID_GEN_CO_GET_TIME_CAPS 0x00010201 -#define RNDIS_OID_GEN_CO_GET_NETCARD_TIME 0x00010202 - -/* - * These are connection-oriented statistics OIDs. - */ -#define RNDIS_OID_GEN_CO_XMIT_PDUS_OK 0x00020101 -#define RNDIS_OID_GEN_CO_RCV_PDUS_OK 0x00020102 -#define RNDIS_OID_GEN_CO_XMIT_PDUS_ERROR 0x00020103 -#define RNDIS_OID_GEN_CO_RCV_PDUS_ERROR 0x00020104 -#define RNDIS_OID_GEN_CO_RCV_PDUS_NO_BUFFER 0x00020105 - - -#define RNDIS_OID_GEN_CO_RCV_CRC_ERROR 0x00020201 -#define RNDIS_OID_GEN_CO_TRANSMIT_QUEUE_LENGTH 0x00020202 -#define RNDIS_OID_GEN_CO_BYTES_XMIT 0x00020203 -#define RNDIS_OID_GEN_CO_BYTES_RCV 0x00020204 -#define RNDIS_OID_GEN_CO_BYTES_XMIT_OUTSTANDING 0x00020205 -#define RNDIS_OID_GEN_CO_NETCARD_LOAD 0x00020206 - -/* - * These are objects for Connection-oriented media call-managers. - */ -#define RNDIS_OID_CO_ADD_PVC 0xFF000001 -#define RNDIS_OID_CO_DELETE_PVC 0xFF000002 -#define RNDIS_OID_CO_GET_CALL_INFORMATION 0xFF000003 -#define RNDIS_OID_CO_ADD_ADDRESS 0xFF000004 -#define RNDIS_OID_CO_DELETE_ADDRESS 0xFF000005 -#define RNDIS_OID_CO_GET_ADDRESSES 0xFF000006 -#define RNDIS_OID_CO_ADDRESS_CHANGE 0xFF000007 -#define RNDIS_OID_CO_SIGNALING_ENABLED 0xFF000008 -#define RNDIS_OID_CO_SIGNALING_DISABLED 0xFF000009 - - -/* - * 802.3 Objects (Ethernet) - */ - -#define RNDIS_OID_802_3_PERMANENT_ADDRESS 0x01010101 -#define RNDIS_OID_802_3_CURRENT_ADDRESS 0x01010102 -#define RNDIS_OID_802_3_MULTICAST_LIST 0x01010103 -#define RNDIS_OID_802_3_MAXIMUM_LIST_SIZE 0x01010104 -#define RNDIS_OID_802_3_MAC_OPTIONS 0x01010105 - -/* - * - */ -#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001 - -#define RNDIS_OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101 -#define RNDIS_OID_802_3_XMIT_ONE_COLLISION 0x01020102 -#define RNDIS_OID_802_3_XMIT_MORE_COLLISIONS 0x01020103 - -#define RNDIS_OID_802_3_XMIT_DEFERRED 0x01020201 -#define RNDIS_OID_802_3_XMIT_MAX_COLLISIONS 0x01020202 -#define RNDIS_OID_802_3_RCV_OVERRUN 0x01020203 -#define RNDIS_OID_802_3_XMIT_UNDERRUN 0x01020204 -#define RNDIS_OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205 -#define RNDIS_OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206 -#define RNDIS_OID_802_3_XMIT_LATE_COLLISIONS 0x01020207 - - -/* - * RNDIS MP custom OID for test - */ -#define OID_RNDISMP_GET_RECEIVE_BUFFERS 0xFFA0C90D // Query only - -/* - * Remote NDIS offload parameters - */ -#define RNDIS_OBJECT_TYPE_DEFAULT 0x80 - -#define RNDIS_OFFLOAD_PARAMETERS_REVISION_3 3 -#define RNDIS_OFFLOAD_PARAMETERS_NO_CHANGE 0 -#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_DISABLED 1 -#define RNDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED 2 -#define RNDIS_OFFLOAD_PARAMETERS_LSOV1_ENABLED 2 -#define RNDIS_OFFLOAD_PARAMETERS_RSC_DISABLED 1 -#define RNDIS_OFFLOAD_PARAMETERS_RSC_ENABLED 2 -#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED 1 -#define RNDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED 2 -#define RNDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED 3 -#define RNDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED 4 - -#define RNDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE 1 -#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV4 0 -#define RNDIS_TCP_LARGE_SEND_OFFLOAD_IPV6 1 - - -#define RNDIS_OID_TCP_OFFLOAD_CURRENT_CONFIG 0xFC01020B /* query only */ -#define RNDIS_OID_TCP_OFFLOAD_PARAMETERS 0xFC01020C /* set only */ -#define RNDIS_OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020D/* query only */ -#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG 0xFC01020E /* query only */ -#define RNDIS_OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020F /* query */ -#define RNDIS_OID_OFFLOAD_ENCAPSULATION 0x0101010A /* set/query */ - -/* - * NdisInitialize message - */ -typedef struct rndis_initialize_request_ { - /* RNDIS request ID */ - uint32_t request_id; - uint32_t major_version; - uint32_t minor_version; - uint32_t max_xfer_size; -} rndis_initialize_request; - -/* - * Response to NdisInitialize - */ -typedef struct rndis_initialize_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; - uint32_t major_version; - uint32_t minor_version; - uint32_t device_flags; - /* RNDIS medium */ - uint32_t medium; - uint32_t max_pkts_per_msg; - uint32_t max_xfer_size; - uint32_t pkt_align_factor; - uint32_t af_list_offset; - uint32_t af_list_size; -} rndis_initialize_complete; - -/* - * Call manager devices only: Information about an address family - * supported by the device is appended to the response to NdisInitialize. - */ -typedef struct rndis_co_address_family_ { - /* RNDIS AF */ - uint32_t address_family; - uint32_t major_version; - uint32_t minor_version; -} rndis_co_address_family; - -/* - * NdisHalt message - */ -typedef struct rndis_halt_request_ { - /* RNDIS request ID */ - uint32_t request_id; -} rndis_halt_request; - -/* - * NdisQueryRequest message - */ -typedef struct rndis_query_request_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS OID */ - uint32_t oid; - uint32_t info_buffer_length; - uint32_t info_buffer_offset; - /* RNDIS handle */ - uint32_t device_vc_handle; -} rndis_query_request; - -/* - * Response to NdisQueryRequest - */ -typedef struct rndis_query_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; - uint32_t info_buffer_length; - uint32_t info_buffer_offset; -} rndis_query_complete; - -/* - * NdisSetRequest message - */ -typedef struct rndis_set_request_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS OID */ - uint32_t oid; - uint32_t info_buffer_length; - uint32_t info_buffer_offset; - /* RNDIS handle */ - uint32_t device_vc_handle; -} rndis_set_request; - -/* - * Response to NdisSetRequest - */ -typedef struct rndis_set_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; -} rndis_set_complete; - -/* - * NdisReset message - */ -typedef struct rndis_reset_request_ { - uint32_t reserved; -} rndis_reset_request; - -/* - * Response to NdisReset - */ -typedef struct rndis_reset_complete_ { - /* RNDIS status */ - uint32_t status; - uint32_t addressing_reset; -} rndis_reset_complete; - -/* - * NdisMIndicateStatus message - */ -typedef struct rndis_indicate_status_ { - /* RNDIS status */ - uint32_t status; - uint32_t status_buf_length; - uint32_t status_buf_offset; -} rndis_indicate_status; - -/* - * Diagnostic information passed as the status buffer in - * rndis_indicate_status messages signifying error conditions. - */ -typedef struct rndis_diagnostic_info_ { - /* RNDIS status */ - uint32_t diag_status; - uint32_t error_offset; -} rndis_diagnostic_info; - -/* - * NdisKeepAlive message - */ -typedef struct rndis_keepalive_request_ { - /* RNDIS request ID */ - uint32_t request_id; -} rndis_keepalive_request; - -/* - * Response to NdisKeepAlive - */ -typedef struct rndis_keepalive_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; -} rndis_keepalive_complete; - -/* - * Data message. All offset fields contain byte offsets from the beginning - * of the rndis_packet structure. All length fields are in bytes. - * VcHandle is set to 0 for connectionless data, otherwise it - * contains the VC handle. - */ -typedef struct rndis_packet_ { - uint32_t data_offset; - uint32_t data_length; - uint32_t oob_data_offset; - uint32_t oob_data_length; - uint32_t num_oob_data_elements; - uint32_t per_pkt_info_offset; - uint32_t per_pkt_info_length; - /* RNDIS handle */ - uint32_t vc_handle; - uint32_t reserved; -} rndis_packet; - -typedef struct rndis_packet_ex_ { - uint32_t data_offset; - uint32_t data_length; - uint32_t oob_data_offset; - uint32_t oob_data_length; - uint32_t num_oob_data_elements; - uint32_t per_pkt_info_offset; - uint32_t per_pkt_info_length; - /* RNDIS handle */ - uint32_t vc_handle; - uint32_t reserved; - uint64_t data_buf_id; - uint32_t data_buf_offset; - uint64_t next_header_buf_id; - uint32_t next_header_byte_offset; - uint32_t next_header_byte_count; -} rndis_packet_ex; - -/* - * Optional Out of Band data associated with a Data message. - */ -typedef struct rndis_oobd_ { - uint32_t size; - /* RNDIS class ID */ - uint32_t type; - uint32_t class_info_offset; -} rndis_oobd; - -/* - * Packet extension field contents associated with a Data message. - */ -typedef struct rndis_per_packet_info_ { - uint32_t size; - uint32_t type; - uint32_t per_packet_info_offset; -} rndis_per_packet_info; - -typedef enum ndis_per_pkt_infotype_ { - tcpip_chksum_info, - ipsec_info, - tcp_large_send_info, - classification_handle_info, - ndis_reserved, - sgl_info, - ieee_8021q_info, - original_pkt_info, - pkt_cancel_id, - original_netbuf_list, - cached_netbuf_list, - short_pkt_padding_info, - max_perpkt_info -} ndis_per_pkt_infotype; - -#define nbl_hash_value pkt_cancel_id -#define nbl_hash_info original_netbuf_list - -typedef struct ndis_8021q_info_ { - union { - struct { - uint32_t user_pri : 3; /* User Priority */ - uint32_t cfi : 1; /* Canonical Format ID */ - uint32_t vlan_id : 12; - uint32_t reserved : 16; - } s1; - uint32_t value; - } u1; -} ndis_8021q_info; - -struct rndis_object_header { - uint8_t type; - uint8_t revision; - uint16_t size; -}; - -typedef struct rndis_offload_params_ { - struct rndis_object_header header; - uint8_t ipv4_csum; - uint8_t tcp_ipv4_csum; - uint8_t udp_ipv4_csum; - uint8_t tcp_ipv6_csum; - uint8_t udp_ipv6_csum; - uint8_t lso_v1; - uint8_t ip_sec_v1; - uint8_t lso_v2_ipv4; - uint8_t lso_v2_ipv6; - uint8_t tcp_connection_ipv4; - uint8_t tcp_connection_ipv6; - uint32_t flags; - uint8_t ip_sec_v2; - uint8_t ip_sec_v2_ipv4; - struct { - uint8_t rsc_ipv4; - uint8_t rsc_ipv6; - }; - struct { - uint8_t encapsulated_packet_task_offload; - uint8_t encapsulation_types; - }; - -} rndis_offload_params; - - -typedef struct rndis_tcp_ip_csum_info_ { - union { - struct { - uint32_t is_ipv4:1; - uint32_t is_ipv6:1; - uint32_t tcp_csum:1; - uint32_t udp_csum:1; - uint32_t ip_header_csum:1; - uint32_t reserved:11; - uint32_t tcp_header_offset:10; - } xmit; - struct { - uint32_t tcp_csum_failed:1; - uint32_t udp_csum_failed:1; - uint32_t ip_csum_failed:1; - uint32_t tcp_csum_succeeded:1; - uint32_t udp_csum_succeeded:1; - uint32_t ip_csum_succeeded:1; - uint32_t loopback:1; - uint32_t tcp_csum_value_invalid:1; - uint32_t ip_csum_value_invalid:1; - } receive; - uint32_t value; - }; -} rndis_tcp_ip_csum_info; - -struct rndis_hash_value { - uint32_t hash_value; -} __packed; - -struct rndis_hash_info { - uint32_t hash_info; -} __packed; - -typedef struct rndis_tcp_tso_info_ { - union { - struct { - uint32_t unused:30; - uint32_t type:1; - uint32_t reserved2:1; - } xmit; - struct { - uint32_t mss:20; - uint32_t tcp_header_offset:10; - uint32_t type:1; - uint32_t reserved2:1; - } lso_v1_xmit; - struct { - uint32_t tcp_payload:30; - uint32_t type:1; - uint32_t reserved2:1; - } lso_v1_xmit_complete; - struct { - uint32_t mss:20; - uint32_t tcp_header_offset:10; - uint32_t type:1; - uint32_t ip_version:1; - } lso_v2_xmit; - struct { - uint32_t reserved:30; - uint32_t type:1; - uint32_t reserved2:1; - } lso_v2_xmit_complete; - uint32_t value; - }; -} rndis_tcp_tso_info; - -/* - * Format of Information buffer passed in a SetRequest for the OID - * OID_GEN_RNDIS_CONFIG_PARAMETER. - */ -typedef struct rndis_config_parameter_info_ { - uint32_t parameter_name_offset; - uint32_t parameter_name_length; - uint32_t parameter_type; - uint32_t parameter_value_offset; - uint32_t parameter_value_length; -} rndis_config_parameter_info; - -/* - * Values for ParameterType in rndis_config_parameter_info - */ -#define RNDIS_CONFIG_PARAM_TYPE_INTEGER 0 -#define RNDIS_CONFIG_PARAM_TYPE_STRING 2 - - -/* - * CONDIS Miniport messages for connection oriented devices - * that do not implement a call manager. - */ - -/* - * CoNdisMiniportCreateVc message - */ -typedef struct rcondis_mp_create_vc_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS handle */ - uint32_t ndis_vc_handle; -} rcondis_mp_create_vc; - -/* - * Response to CoNdisMiniportCreateVc - */ -typedef struct rcondis_mp_create_vc_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS handle */ - uint32_t device_vc_handle; - /* RNDIS status */ - uint32_t status; -} rcondis_mp_create_vc_complete; - -/* - * CoNdisMiniportDeleteVc message - */ -typedef struct rcondis_mp_delete_vc_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS handle */ - uint32_t device_vc_handle; -} rcondis_mp_delete_vc; - -/* - * Response to CoNdisMiniportDeleteVc - */ -typedef struct rcondis_mp_delete_vc_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; -} rcondis_mp_delete_vc_complete; - -/* - * CoNdisMiniportQueryRequest message - */ -typedef struct rcondis_mp_query_request_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS request type */ - uint32_t request_type; - /* RNDIS OID */ - uint32_t oid; - /* RNDIS handle */ - uint32_t device_vc_handle; - uint32_t info_buf_length; - uint32_t info_buf_offset; -} rcondis_mp_query_request; - -/* - * CoNdisMiniportSetRequest message - */ -typedef struct rcondis_mp_set_request_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS request type */ - uint32_t request_type; - /* RNDIS OID */ - uint32_t oid; - /* RNDIS handle */ - uint32_t device_vc_handle; - uint32_t info_buf_length; - uint32_t info_buf_offset; -} rcondis_mp_set_request; - -/* - * CoNdisIndicateStatus message - */ -typedef struct rcondis_indicate_status_ { - /* RNDIS handle */ - uint32_t ndis_vc_handle; - /* RNDIS status */ - uint32_t status; - uint32_t status_buf_length; - uint32_t status_buf_offset; -} rcondis_indicate_status; - -/* - * CONDIS Call/VC parameters - */ - -typedef struct rcondis_specific_parameters_ { - uint32_t parameter_type; - uint32_t parameter_length; - uint32_t parameter_offset; -} rcondis_specific_parameters; - -typedef struct rcondis_media_parameters_ { - uint32_t flags; - uint32_t reserved1; - uint32_t reserved2; - rcondis_specific_parameters media_specific; -} rcondis_media_parameters; - -typedef struct rndis_flowspec_ { - uint32_t token_rate; - uint32_t token_bucket_size; - uint32_t peak_bandwidth; - uint32_t latency; - uint32_t delay_variation; - uint32_t service_type; - uint32_t max_sdu_size; - uint32_t minimum_policed_size; -} rndis_flowspec; - -typedef struct rcondis_call_manager_parameters_ { - rndis_flowspec transmit; - rndis_flowspec receive; - rcondis_specific_parameters call_mgr_specific; -} rcondis_call_manager_parameters; - -/* - * CoNdisMiniportActivateVc message - */ -typedef struct rcondis_mp_activate_vc_request_ { - /* RNDIS request ID */ - uint32_t request_id; - uint32_t flags; - /* RNDIS handle */ - uint32_t device_vc_handle; - uint32_t media_params_offset; - uint32_t media_params_length; - uint32_t call_mgr_params_offset; - uint32_t call_mgr_params_length; -} rcondis_mp_activate_vc_request; - -/* - * Response to CoNdisMiniportActivateVc - */ -typedef struct rcondis_mp_activate_vc_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; -} rcondis_mp_activate_vc_complete; - -/* - * CoNdisMiniportDeactivateVc message - */ -typedef struct rcondis_mp_deactivate_vc_request_ { - /* RNDIS request ID */ - uint32_t request_id; - uint32_t flags; - /* RNDIS handle */ - uint32_t device_vc_handle; -} rcondis_mp_deactivate_vc_request; - -/* - * Response to CoNdisMiniportDeactivateVc - */ -typedef struct rcondis_mp_deactivate_vc_complete_ { - /* RNDIS request ID */ - uint32_t request_id; - /* RNDIS status */ - uint32_t status; -} rcondis_mp_deactivate_vc_complete; - -/* - * union with all of the RNDIS messages - */ -typedef union rndis_msg_container_ { - rndis_packet packet; - rndis_initialize_request init_request; - rndis_halt_request halt_request; - rndis_query_request query_request; - rndis_set_request set_request; - rndis_reset_request reset_request; - rndis_keepalive_request keepalive_request; - rndis_indicate_status indicate_status; - rndis_initialize_complete init_complete; - rndis_query_complete query_complete; - rndis_set_complete set_complete; - rndis_reset_complete reset_complete; - rndis_keepalive_complete keepalive_complete; - rcondis_mp_create_vc co_miniport_create_vc; - rcondis_mp_delete_vc co_miniport_delete_vc; - rcondis_indicate_status co_miniport_status; - rcondis_mp_activate_vc_request co_miniport_activate_vc; - rcondis_mp_deactivate_vc_request co_miniport_deactivate_vc; - rcondis_mp_create_vc_complete co_miniport_create_vc_complete; - rcondis_mp_delete_vc_complete co_miniport_delete_vc_complete; - rcondis_mp_activate_vc_complete co_miniport_activate_vc_complete; - rcondis_mp_deactivate_vc_complete co_miniport_deactivate_vc_complete; - rndis_packet_ex packet_ex; -} rndis_msg_container; - -/* - * Remote NDIS message format - */ -typedef struct rndis_msg_ { - uint32_t ndis_msg_type; - - /* - * Total length of this message, from the beginning - * of the rndis_msg struct, in bytes. - */ - uint32_t msg_len; - - /* Actual message */ - rndis_msg_container msg; -} rndis_msg; - - -/* - * Handy macros - */ - -/* - * get the size of an RNDIS message. Pass in the message type, - * rndis_set_request, rndis_packet for example - */ -#define RNDIS_MESSAGE_SIZE(message) \ - (sizeof(message) + (sizeof(rndis_msg) - sizeof(rndis_msg_container))) - -/* - * get pointer to info buffer with message pointer - */ -#define MESSAGE_TO_INFO_BUFFER(message) \ - (((PUCHAR)(message)) + message->InformationBufferOffset) - -/* - * get pointer to status buffer with message pointer - */ -#define MESSAGE_TO_STATUS_BUFFER(message) \ - (((PUCHAR)(message)) + message->StatusBufferOffset) - -/* - * get pointer to OOBD buffer with message pointer - */ -#define MESSAGE_TO_OOBD_BUFFER(message) \ - (((PUCHAR)(message)) + message->OOBDataOffset) - -/* - * get pointer to data buffer with message pointer - */ -#define MESSAGE_TO_DATA_BUFFER(message) \ - (((PUCHAR)(message)) + message->PerPacketInfoOffset) - -/* - * get pointer to contained message from NDIS_MESSAGE pointer - */ -#define RNDIS_MESSAGE_PTR_TO_MESSAGE_PTR(rndis_message) \ - ((void *) &rndis_message->Message) - -/* - * get pointer to contained message from NDIS_MESSAGE pointer - */ -#define RNDIS_MESSAGE_RAW_PTR_TO_MESSAGE_PTR(rndis_message) \ - ((void *) rndis_message) - - - -/* - * Structures used in OID_RNDISMP_GET_RECEIVE_BUFFERS - */ - -#define RNDISMP_RECEIVE_BUFFER_ELEM_FLAG_VMQ_RECEIVE_BUFFER 0x00000001 - -typedef struct rndismp_rx_buf_elem_ { - uint32_t flags; - uint32_t length; - uint64_t rx_buf_id; - uint32_t gpadl_handle; - void *rx_buf; -} rndismp_rx_buf_elem; - -typedef struct rndismp_rx_bufs_info_ { - uint32_t num_rx_bufs; - rndismp_rx_buf_elem rx_buf_elems[1]; -} rndismp_rx_bufs_info; - - - -#define RNDIS_HEADER_SIZE (sizeof(rndis_msg) - sizeof(rndis_msg_container)) - -/* - * Externs - */ -struct hn_rx_ring; -struct hn_tx_ring; -struct hn_recvinfo; - -int netvsc_recv(struct hn_rx_ring *rxr, const void *data, int dlen, - const struct hn_recvinfo *info); -void netvsc_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr); - -#endif /* __HV_RNDIS_H__ */ - Index: head/sys/dev/hyperv/netvsc/hv_rndis_filter.c =================================================================== --- head/sys/dev/hyperv/netvsc/hv_rndis_filter.c +++ head/sys/dev/hyperv/netvsc/hv_rndis_filter.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -48,7 +49,6 @@ #include #include #include -#include #include #include #include @@ -419,7 +419,7 @@ pkt->rm_len, data_off, data_len); return; } - netvsc_recv(rxr, ((const uint8_t *)pkt) + data_off, data_len, &info); + hn_rxpkt(rxr, ((const uint8_t *)pkt) + data_off, data_len, &info); } /* @@ -731,7 +731,7 @@ /* * Only NDIS 6.30+ is supported. */ - KASSERT(sc->hn_ndis_ver >= NDIS_VERSION_6_30, + KASSERT(sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30, ("NDIS 6.30+ is required, NDIS version 0x%08x", sc->hn_ndis_ver)); *rxr_cnt = 0; @@ -827,7 +827,7 @@ memset(¶ms, 0, sizeof(params)); params.ndis_hdr.ndis_type = NDIS_OBJTYPE_DEFAULT; - if (sc->hn_ndis_ver < NDIS_VERSION_6_30) { + if (sc->hn_ndis_ver < HN_NDIS_VERSION_6_30) { params.ndis_hdr.ndis_rev = NDIS_OFFLOAD_PARAMS_REV_2; paramsz = NDIS_OFFLOAD_PARAMS_SIZE_6_1; } else { @@ -839,7 +839,7 @@ params.ndis_ip4csum = NDIS_OFFLOAD_PARAM_TXRX; params.ndis_tcp4csum = NDIS_OFFLOAD_PARAM_TXRX; params.ndis_tcp6csum = NDIS_OFFLOAD_PARAM_TXRX; - if (sc->hn_ndis_ver >= NDIS_VERSION_6_30) { + if (sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30) { params.ndis_udp4csum = NDIS_OFFLOAD_PARAM_TXRX; params.ndis_udp6csum = NDIS_OFFLOAD_PARAM_TXRX; } @@ -866,7 +866,7 @@ /* * Only NDIS 6.30+ is supported. */ - KASSERT(sc->hn_ndis_ver >= NDIS_VERSION_6_30, + KASSERT(sc->hn_ndis_ver >= HN_NDIS_VERSION_6_30, ("NDIS 6.30+ is required, NDIS version 0x%08x", sc->hn_ndis_ver)); memset(rss, 0, sizeof(*rss)); @@ -1059,7 +1059,7 @@ hv_rf_query_device_link_status(sc, &dev_info->link_state); - if (sc->hn_ndis_ver < NDIS_VERSION_6_30 || nchan == 1) { + if (sc->hn_ndis_ver < HN_NDIS_VERSION_6_30 || nchan == 1) { /* * Either RSS is not supported, or multiple RX/TX rings * are not requested. @@ -1189,5 +1189,5 @@ hv_rf_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr) { - netvsc_channel_rollup(rxr, txr); + hn_chan_rollup(rxr, txr); } Index: head/sys/dev/hyperv/netvsc/if_hnreg.h =================================================================== --- head/sys/dev/hyperv/netvsc/if_hnreg.h +++ head/sys/dev/hyperv/netvsc/if_hnreg.h @@ -32,6 +32,14 @@ #include #include +/* + * NDIS protocol version numbers + */ +#define HN_NDIS_VERSION_6_1 0x00060001 +#define HN_NDIS_VERSION_6_30 0x0006001e +#define HN_NDIS_VERSION_MAJOR(ver) (((ver) & 0xffff0000) >> 16) +#define HN_NDIS_VERSION_MINOR(ver) ((ver) & 0xffff) + #define HN_NVS_RXBUF_SIG 0xcafe #define HN_NVS_CHIM_SIG 0xface Index: head/sys/dev/hyperv/netvsc/if_hnvar.h =================================================================== --- head/sys/dev/hyperv/netvsc/if_hnvar.h +++ head/sys/dev/hyperv/netvsc/if_hnvar.h @@ -112,6 +112,7 @@ } struct vmbus_xact; +struct rndis_packet_msg; const void *hn_nvs_xact_execute(struct hn_softc *sc, struct vmbus_xact *xact, void *req, int reqlen, @@ -124,6 +125,10 @@ void *hn_rndis_pktinfo_append(struct rndis_packet_msg *, size_t pktsize, size_t pi_dlen, uint32_t pi_type); +int hn_rxpkt(struct hn_rx_ring *rxr, const void *data, int dlen, + const struct hn_recvinfo *info); +void hn_chan_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr); + extern struct hn_send_ctx hn_send_ctx_none; #endif /* !_IF_HNVAR_H_ */