hyperv/hn: Log a warning for RESET_CMPLT.

RESET is not used by the hn(4) at all, and RESET_CMPLT does not even
have a rid to match with the pending requests.  So, let's put it
onto an independent switch branch and log a warning about it.

MFC after:	1 week
Sponsored by:	Microsoft
Differential Revision:	https://reviews.freebsd.org/D7602
This commit is contained in:
sephe 2016-08-24 04:21:15 +00:00
parent 6eb886e66d
commit afdb7b42e8

View File

@ -324,16 +324,9 @@ hv_rf_receive_response(rndis_device *device, const rndis_msg *response)
memcpy(&request->response_msg, response,
response->msg_len);
} else {
if (response->ndis_msg_type == REMOTE_NDIS_RESET_CMPLT) {
/* Does not have a request id field */
request->response_msg.msg.reset_complete.status =
STATUS_BUFFER_OVERFLOW;
} else {
request->response_msg.msg.init_complete.status =
STATUS_BUFFER_OVERFLOW;
}
request->response_msg.msg.init_complete.status =
STATUS_BUFFER_OVERFLOW;
}
sema_post(&request->wait_sema);
}
}
@ -566,29 +559,40 @@ hv_rf_on_receive(struct hn_softc *sc, struct hn_rx_ring *rxr,
rndis_hdr = data;
switch (rndis_hdr->ndis_msg_type) {
/* data message */
case REMOTE_NDIS_PACKET_MSG:
hv_rf_receive_data(rxr, data, dlen);
break;
/* completion messages */
case REMOTE_NDIS_INITIALIZE_CMPLT:
case REMOTE_NDIS_QUERY_CMPLT:
case REMOTE_NDIS_SET_CMPLT:
case REMOTE_NDIS_RESET_CMPLT:
case REMOTE_NDIS_KEEPALIVE_CMPLT:
hv_rf_receive_response(rndis_dev, rndis_hdr);
break;
/* notification message */
case REMOTE_NDIS_INDICATE_STATUS_MSG:
hv_rf_receive_indicate_status(rndis_dev, rndis_hdr);
break;
case REMOTE_NDIS_RESET_CMPLT:
/*
* Reset completed, no rid.
*
* NOTE:
* RESET is not issued by hn(4), so this message should
* _not_ be observed.
*/
if_printf(sc->hn_ifp, "RESET CMPLT received\n");
break;
default:
printf("hv_rf_on_receive(): Unknown msg_type 0x%x\n",
if_printf(sc->hn_ifp, "unknown RNDIS message 0x%x\n",
rndis_hdr->ndis_msg_type);
break;
}
return (0);
}