svn commit: r307604 - stable/11/sys/dev/hyperv/netvsc
Sepherosa Ziehau
sephe at FreeBSD.org
Wed Oct 19 05:38:52 UTC 2016
Author: sephe
Date: Wed Oct 19 05:38:50 2016
New Revision: 307604
URL: https://svnweb.freebsd.org/changeset/base/307604
Log:
MFC 306393
hyperv/hn: Flatten RX filter configuration.
This paves way for more fixes.
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D8049
Modified:
stable/11/sys/dev/hyperv/netvsc/hv_net_vsc.h
stable/11/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.c
stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.h
stable/11/sys/dev/hyperv/netvsc/if_hnvar.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/hyperv/netvsc/hv_net_vsc.h
==============================================================================
--- stable/11/sys/dev/hyperv/netvsc/hv_net_vsc.h Wed Oct 19 05:08:46 2016 (r307603)
+++ stable/11/sys/dev/hyperv/netvsc/hv_net_vsc.h Wed Oct 19 05:38:50 2016 (r307604)
@@ -265,7 +265,6 @@ struct hn_softc {
/*
* Externs
*/
-extern int hv_promisc_mode;
struct hn_send_ctx;
void netvsc_linkstatus_callback(struct hn_softc *sc, uint32_t status);
Modified: stable/11/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- stable/11/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Wed Oct 19 05:08:46 2016 (r307603)
+++ stable/11/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c Wed Oct 19 05:38:50 2016 (r307604)
@@ -205,8 +205,6 @@ struct hn_txdesc {
* Globals
*/
-int hv_promisc_mode = 0; /* normal mode by default */
-
SYSCTL_NODE(_hw, OID_AUTO, hn, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL,
"Hyper-V network interface");
@@ -1779,7 +1777,7 @@ static void
hn_stop(struct hn_softc *sc)
{
struct ifnet *ifp;
- int ret, i;
+ int i;
HN_LOCK_ASSERT(sc);
@@ -1795,7 +1793,8 @@ hn_stop(struct hn_softc *sc)
if_link_state_change(ifp, LINK_STATE_DOWN);
- ret = hv_rf_on_close(sc);
+ /* Disable RX by clearing RX filter. */
+ hn_rndis_set_rxfilter(sc, 0);
}
/*
@@ -1870,9 +1869,8 @@ hn_init_locked(struct hn_softc *sc)
return;
}
- hv_promisc_mode = 1;
-
- ret = hv_rf_on_open(sc);
+ /* TODO: add hn_rx_filter */
+ ret = hn_rndis_set_rxfilter(sc, NDIS_PACKET_TYPE_PROMISCUOUS);
if (ret != 0)
return;
@@ -3576,9 +3574,9 @@ hn_suspend(struct hn_softc *sc)
}
/*
- * Disable RX.
+ * Disable RX by clearing RX filter.
*/
- hv_rf_on_close(sc);
+ hn_rndis_set_rxfilter(sc, 0);
/*
* Give RNDIS enough time to flush all pending data packets.
@@ -3612,8 +3610,9 @@ hn_resume(struct hn_softc *sc)
/*
* Re-enable RX.
+ * TODO: add hn_rx_filter.
*/
- hv_rf_on_open(sc);
+ hn_rndis_set_rxfilter(sc, NDIS_PACKET_TYPE_PROMISCUOUS);
/*
* Make sure to clear suspend status on "all" TX rings,
Modified: stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.c
==============================================================================
--- stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.c Wed Oct 19 05:08:46 2016 (r307603)
+++ stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.c Wed Oct 19 05:38:50 2016 (r307604)
@@ -887,7 +887,7 @@ hn_rndis_conf_rss(struct hn_softc *sc, u
return (error);
}
-static int
+int
hn_rndis_set_rxfilter(struct hn_softc *sc, uint32_t filter)
{
int error;
@@ -1013,35 +1013,6 @@ hn_rndis_detach(struct hn_softc *sc)
hn_rndis_halt(sc);
}
-/*
- * RNDIS filter on open
- */
-int
-hv_rf_on_open(struct hn_softc *sc)
-{
- uint32_t filter;
-
- /* XXX */
- if (hv_promisc_mode != 1) {
- filter = NDIS_PACKET_TYPE_BROADCAST |
- NDIS_PACKET_TYPE_ALL_MULTICAST |
- NDIS_PACKET_TYPE_DIRECTED;
- } else {
- filter = NDIS_PACKET_TYPE_PROMISCUOUS;
- }
- return (hn_rndis_set_rxfilter(sc, filter));
-}
-
-/*
- * RNDIS filter on close
- */
-int
-hv_rf_on_close(struct hn_softc *sc)
-{
-
- return (hn_rndis_set_rxfilter(sc, 0));
-}
-
void
hv_rf_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr)
{
Modified: stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.h
==============================================================================
--- stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.h Wed Oct 19 05:08:46 2016 (r307603)
+++ stable/11/sys/dev/hyperv/netvsc/hv_rndis_filter.h Wed Oct 19 05:38:50 2016 (r307604)
@@ -43,8 +43,6 @@ struct hn_rx_ring;
void hv_rf_on_receive(struct hn_softc *sc, struct hn_rx_ring *rxr,
const void *data, int dlen);
void hv_rf_channel_rollup(struct hn_rx_ring *rxr, struct hn_tx_ring *txr);
-int hv_rf_on_open(struct hn_softc *sc);
-int hv_rf_on_close(struct hn_softc *sc);
#endif /* __HV_RNDIS_FILTER_H__ */
Modified: stable/11/sys/dev/hyperv/netvsc/if_hnvar.h
==============================================================================
--- stable/11/sys/dev/hyperv/netvsc/if_hnvar.h Wed Oct 19 05:08:46 2016 (r307603)
+++ stable/11/sys/dev/hyperv/netvsc/if_hnvar.h Wed Oct 19 05:38:50 2016 (r307604)
@@ -126,6 +126,8 @@ int hn_rndis_get_rsscaps(struct hn_soft
int hn_rndis_get_eaddr(struct hn_softc *sc, uint8_t *eaddr);
int hn_rndis_get_linkstatus(struct hn_softc *sc,
uint32_t *link_status);
+/* filter: NDIS_PACKET_TYPE_ or 0. */
+int hn_rndis_set_rxfilter(struct hn_softc *sc, uint32_t filter);
int hn_nvs_attach(struct hn_softc *sc, int mtu);
void hn_nvs_detach(struct hn_softc *sc);
More information about the svn-src-all
mailing list