Page MenuHomeFreeBSD

D7541.id19376.diff
No OneTemporary

D7541.id19376.diff

Index: sys/dev/hyperv/netvsc/hv_net_vsc.h
===================================================================
--- sys/dev/hyperv/netvsc/hv_net_vsc.h
+++ sys/dev/hyperv/netvsc/hv_net_vsc.h
@@ -275,7 +275,6 @@
#endif
typedef struct netvsc_packet_ {
- uint16_t vlan_tci;
uint32_t status;
uint32_t tot_data_buf_len;
void *data;
Index: sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
===================================================================
--- sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -1278,9 +1278,7 @@
*/
int
netvsc_recv(struct hn_rx_ring *rxr, netvsc_packet *packet,
- const rndis_tcp_ip_csum_info *csum_info,
- const struct rndis_hash_info *hash_info,
- const struct rndis_hash_value *hash_value)
+ const struct hn_recvinfo *info)
{
struct ifnet *ifp = rxr->hn_ifp;
struct mbuf *m_new;
@@ -1332,28 +1330,28 @@
do_csum = 0;
/* receive side checksum offload */
- if (csum_info != NULL) {
+ if (info->csum_info != NULL) {
/* IP csum offload */
- if (csum_info->receive.ip_csum_succeeded && do_csum) {
+ if (info->csum_info->receive.ip_csum_succeeded && do_csum) {
m_new->m_pkthdr.csum_flags |=
(CSUM_IP_CHECKED | CSUM_IP_VALID);
rxr->hn_csum_ip++;
}
/* TCP/UDP csum offload */
- if ((csum_info->receive.tcp_csum_succeeded ||
- csum_info->receive.udp_csum_succeeded) && do_csum) {
+ if ((info->csum_info->receive.tcp_csum_succeeded ||
+ info->csum_info->receive.udp_csum_succeeded) && do_csum) {
m_new->m_pkthdr.csum_flags |=
(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
m_new->m_pkthdr.csum_data = 0xffff;
- if (csum_info->receive.tcp_csum_succeeded)
+ if (info->csum_info->receive.tcp_csum_succeeded)
rxr->hn_csum_tcp++;
else
rxr->hn_csum_udp++;
}
- if (csum_info->receive.ip_csum_succeeded &&
- csum_info->receive.tcp_csum_succeeded)
+ if (info->csum_info->receive.ip_csum_succeeded &&
+ info->csum_info->receive.tcp_csum_succeeded)
do_lro = 1;
} else {
const struct ether_header *eh;
@@ -1409,19 +1407,18 @@
}
}
skip:
- if ((packet->vlan_tci != 0) &&
- (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0) {
- m_new->m_pkthdr.ether_vtag = packet->vlan_tci;
+ if (info->vlan_info != NULL) {
+ m_new->m_pkthdr.ether_vtag = info->vlan_info->u1.s1.vlan_id;
m_new->m_flags |= M_VLANTAG;
}
- if (hash_info != NULL && hash_value != NULL) {
+ if (info->hash_info != NULL && info->hash_value != NULL) {
rxr->hn_rss_pkts++;
- m_new->m_pkthdr.flowid = hash_value->hash_value;
- if ((hash_info->hash_info & NDIS_HASH_FUNCTION_MASK) ==
+ m_new->m_pkthdr.flowid = info->hash_value->hash_value;
+ if ((info->hash_info->hash_info & NDIS_HASH_FUNCTION_MASK) ==
NDIS_HASH_FUNCTION_TOEPLITZ) {
uint32_t type =
- (hash_info->hash_info & NDIS_HASH_TYPE_MASK);
+ (info->hash_info->hash_info & NDIS_HASH_TYPE_MASK);
switch (type) {
case NDIS_HASH_IPV4:
@@ -1450,8 +1447,8 @@
}
}
} else {
- if (hash_value != NULL) {
- m_new->m_pkthdr.flowid = hash_value->hash_value;
+ if (info->hash_value != NULL) {
+ m_new->m_pkthdr.flowid = info->hash_value->hash_value;
} else {
m_new->m_pkthdr.flowid = rxr->hn_rx_idx;
hash_type = M_HASHTYPE_OPAQUE;
Index: sys/dev/hyperv/netvsc/hv_rndis.h
===================================================================
--- sys/dev/hyperv/netvsc/hv_rndis.h
+++ sys/dev/hyperv/netvsc/hv_rndis.h
@@ -1088,11 +1088,10 @@
*/
struct hn_rx_ring;
struct hn_tx_ring;
+struct hn_recvinfo;
int netvsc_recv(struct hn_rx_ring *rxr,
- netvsc_packet *packet, const rndis_tcp_ip_csum_info *csum_info,
- const struct rndis_hash_info *hash_info,
- const struct rndis_hash_value *hash_value);
+ netvsc_packet *packet, const struct hn_recvinfo *info);
void netvsc_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr);
void* hv_set_rppi_data(rndis_msg *rndis_mesg,
Index: sys/dev/hyperv/netvsc/hv_rndis_filter.c
===================================================================
--- sys/dev/hyperv/netvsc/hv_rndis_filter.c
+++ sys/dev/hyperv/netvsc/hv_rndis_filter.c
@@ -52,13 +52,6 @@
#include <dev/hyperv/netvsc/hv_rndis_filter.h>
#include <dev/hyperv/netvsc/if_hnreg.h>
-struct hv_rf_recvinfo {
- const ndis_8021q_info *vlan_info;
- const rndis_tcp_ip_csum_info *csum_info;
- const struct rndis_hash_info *hash_info;
- const struct rndis_hash_value *hash_value;
-};
-
#define HV_RF_RECVINFO_VLAN 0x1
#define HV_RF_RECVINFO_CSUM 0x2
#define HV_RF_RECVINFO_HASHINF 0x4
@@ -444,7 +437,7 @@
}
static int
-hv_rf_find_recvinfo(const rndis_packet *rpkt, struct hv_rf_recvinfo *info)
+hv_rf_find_recvinfo(const rndis_packet *rpkt, struct hn_recvinfo *info)
{
const rndis_per_packet_info *ppi;
uint32_t mask, len;
@@ -530,7 +523,7 @@
{
rndis_packet *rndis_pkt;
uint32_t data_offset;
- struct hv_rf_recvinfo info;
+ struct hn_recvinfo info;
rndis_pkt = &message->msg.packet;
@@ -559,13 +552,7 @@
if_printf(rxr->hn_ifp, "recvinfo parsing failed\n");
return;
}
-
- if (info.vlan_info != NULL)
- pkt->vlan_tci = info.vlan_info->u1.s1.vlan_id;
- else
- pkt->vlan_tci = 0;
-
- netvsc_recv(rxr, pkt, info.csum_info, info.hash_info, info.hash_value);
+ netvsc_recv(rxr, pkt, &info);
}
/*
Index: sys/dev/hyperv/netvsc/if_hnvar.h
===================================================================
--- sys/dev/hyperv/netvsc/if_hnvar.h
+++ sys/dev/hyperv/netvsc/if_hnvar.h
@@ -35,7 +35,6 @@
#include <dev/hyperv/netvsc/if_hnreg.h>
struct netvsc_dev_;
-struct nvsp_msg_;
struct vmbus_channel;
struct hn_send_ctx;
@@ -51,6 +50,18 @@
int hn_chim_sz;
};
+struct rndis_hash_info;
+struct rndix_hash_value;
+struct ndis_8021q_info_;
+struct rndis_tcp_ip_csum_info_;
+
+struct hn_recvinfo {
+ const struct ndis_8021q_info_ *vlan_info;
+ const struct rndis_tcp_ip_csum_info_ *csum_info;
+ const struct rndis_hash_info *hash_info;
+ const struct rndis_hash_value *hash_value;
+};
+
#define HN_SEND_CTX_INITIALIZER(cb, cbarg) \
{ \
.hn_cb = cb, \

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 2, 2:27 PM (9 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27458246
Default Alt Text
D7541.id19376.diff (5 KB)

Event Timeline