Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F111345187
D37855.id120822.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
51 KB
Referenced Files
None
Subscribers
None
D37855.id120822.diff
View Options
diff --git a/sys/dev/hyperv/netvsc/if_hn.c b/sys/dev/hyperv/netvsc/if_hn.c
--- a/sys/dev/hyperv/netvsc/if_hn.c
+++ b/sys/dev/hyperv/netvsc/if_hn.c
@@ -158,7 +158,7 @@
#define HN_LRO_LENLIM_MULTIRX_DEF (12 * ETHERMTU)
#define HN_LRO_LENLIM_DEF (25 * ETHERMTU)
/* YYY 2*MTU is a bit rough, but should be good enough. */
-#define HN_LRO_LENLIM_MIN(ifp) (2 * (ifp)->if_mtu)
+#define HN_LRO_LENLIM_MIN(ifp) (2 * if_getmtu(ifp))
#define HN_LRO_ACKCNT_DEF 1
@@ -247,7 +247,7 @@
struct hn_rxvf_setarg {
struct hn_rx_ring *rxr;
- struct ifnet *vf_ifp;
+ if_t vf_ifp;
};
#define HN_RXINFO_VLAN 0x0001
@@ -270,29 +270,29 @@
void *);
static void hn_init(void *);
-static int hn_ioctl(struct ifnet *, u_long, caddr_t);
+static int hn_ioctl(if_t, u_long, caddr_t);
#ifdef HN_IFSTART_SUPPORT
-static void hn_start(struct ifnet *);
+static void hn_start(if_t);
#endif
-static int hn_transmit(struct ifnet *, struct mbuf *);
-static void hn_xmit_qflush(struct ifnet *);
-static int hn_ifmedia_upd(struct ifnet *);
-static void hn_ifmedia_sts(struct ifnet *,
+static int hn_transmit(if_t, struct mbuf *);
+static void hn_xmit_qflush(if_t);
+static int hn_ifmedia_upd(if_t);
+static void hn_ifmedia_sts(if_t,
struct ifmediareq *);
-static void hn_ifnet_event(void *, struct ifnet *, int);
-static void hn_ifaddr_event(void *, struct ifnet *);
-static void hn_ifnet_attevent(void *, struct ifnet *);
-static void hn_ifnet_detevent(void *, struct ifnet *);
-static void hn_ifnet_lnkevent(void *, struct ifnet *, int);
+static void hn_ifnet_event(void *, if_t, int);
+static void hn_ifaddr_event(void *, if_t);
+static void hn_ifnet_attevent(void *, if_t);
+static void hn_ifnet_detevent(void *, if_t);
+static void hn_ifnet_lnkevent(void *, if_t, int);
static bool hn_ismyvf(const struct hn_softc *,
- const struct ifnet *);
+ const if_t);
static void hn_rxvf_change(struct hn_softc *,
- struct ifnet *, bool);
-static void hn_rxvf_set(struct hn_softc *, struct ifnet *);
+ if_t, bool);
+static void hn_rxvf_set(struct hn_softc *, if_t);
static void hn_rxvf_set_task(void *, int);
-static void hn_xpnt_vf_input(struct ifnet *, struct mbuf *);
+static void hn_xpnt_vf_input(if_t, struct mbuf *);
static int hn_xpnt_vf_iocsetflags(struct hn_softc *);
static int hn_xpnt_vf_iocsetcaps(struct hn_softc *,
struct ifreq *);
@@ -416,9 +416,9 @@
static void hn_txdesc_dmamap_destroy(struct hn_txdesc *);
static void hn_txdesc_gc(struct hn_tx_ring *,
struct hn_txdesc *);
-static int hn_encap(struct ifnet *, struct hn_tx_ring *,
+static int hn_encap(if_t, struct hn_tx_ring *,
struct hn_txdesc *, struct mbuf **);
-static int hn_txpkt(struct ifnet *, struct hn_tx_ring *,
+static int hn_txpkt(if_t, struct hn_tx_ring *,
struct hn_txdesc *);
static void hn_set_chim_size(struct hn_softc *, int);
static void hn_set_tso_maxsize(struct hn_softc *, int, int);
@@ -426,7 +426,7 @@
static void hn_tx_ring_qflush(struct hn_tx_ring *);
static void hn_resume_tx(struct hn_softc *, int);
static void hn_set_txagg(struct hn_softc *);
-static void *hn_try_txagg(struct ifnet *,
+static void *hn_try_txagg(if_t,
struct hn_tx_ring *, struct hn_txdesc *,
int);
static int hn_get_txswq_depth(const struct hn_tx_ring *);
@@ -617,7 +617,7 @@
static struct rmlock hn_vfmap_lock;
static int hn_vfmap_size;
-static struct ifnet **hn_vfmap;
+static if_t *hn_vfmap;
#ifndef RSS
static const uint8_t
@@ -923,7 +923,7 @@
static int
hn_rxfilter_config(struct hn_softc *sc)
{
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
uint32_t filter;
HN_LOCK_ASSERT(sc);
@@ -933,15 +933,15 @@
* its RX filter is configured, so stick the synthetic device in
* the promiscous mode.
*/
- if ((ifp->if_flags & IFF_PROMISC) || (sc->hn_flags & HN_FLAG_RXVF)) {
+ if ((if_getflags(ifp) & IFF_PROMISC) || (sc->hn_flags & HN_FLAG_RXVF)) {
filter = NDIS_PACKET_TYPE_PROMISCUOUS;
} else {
filter = NDIS_PACKET_TYPE_DIRECTED;
- if (ifp->if_flags & IFF_BROADCAST)
+ if (if_getflags(ifp) & IFF_BROADCAST)
filter |= NDIS_PACKET_TYPE_BROADCAST;
/* TODO: support multicast list */
- if ((ifp->if_flags & IFF_ALLMULTI) ||
- !CK_STAILQ_EMPTY(&ifp->if_multiaddrs))
+ if ((if_getflags(ifp) & IFF_ALLMULTI) ||
+ if_llmaddr_count(ifp) != 0)
filter |= NDIS_PACKET_TYPE_ALL_MULTICAST;
}
return (hn_set_rxfilter(sc, filter));
@@ -1098,16 +1098,16 @@
}
static int
-hn_ifmedia_upd(struct ifnet *ifp __unused)
+hn_ifmedia_upd(if_t ifp __unused)
{
return EOPNOTSUPP;
}
static void
-hn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+hn_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr)
{
- struct hn_softc *sc = ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(ifp);
ifmr->ifm_status = IFM_AVALID;
ifmr->ifm_active = IFM_ETHER;
@@ -1129,7 +1129,7 @@
}
static void
-hn_rxvf_set(struct hn_softc *sc, struct ifnet *vf_ifp)
+hn_rxvf_set(struct hn_softc *sc, if_t vf_ifp)
{
struct hn_rx_ring *rxr;
struct hn_rxvf_setarg arg;
@@ -1154,40 +1154,40 @@
}
static bool
-hn_ismyvf(const struct hn_softc *sc, const struct ifnet *ifp)
+hn_ismyvf(const struct hn_softc *sc, const if_t ifp)
{
- const struct ifnet *hn_ifp;
+ if_t hn_ifp;
hn_ifp = sc->hn_ifp;
if (ifp == hn_ifp)
return (false);
- if (ifp->if_alloctype != IFT_ETHER)
+ if (if_getalloctype(ifp) != IFT_ETHER)
return (false);
/* Ignore lagg/vlan interfaces */
- if (strcmp(ifp->if_dname, "lagg") == 0 ||
- strcmp(ifp->if_dname, "vlan") == 0)
+ if (strcmp(if_getdname(ifp), "lagg") == 0 ||
+ strcmp(if_getdname(ifp), "vlan") == 0)
return (false);
/*
- * During detach events ifp->if_addr might be NULL.
+ * During detach events if_getifaddr(ifp) might be NULL.
* Make sure the bcmp() below doesn't panic on that:
*/
- if (ifp->if_addr == NULL || hn_ifp->if_addr == NULL)
+ if (if_getifaddr(ifp) == NULL || if_getifaddr(hn_ifp) == NULL)
return (false);
- if (bcmp(IF_LLADDR(ifp), IF_LLADDR(hn_ifp), ETHER_ADDR_LEN) != 0)
+ if (bcmp(if_getlladdr(ifp), if_getlladdr(hn_ifp), ETHER_ADDR_LEN) != 0)
return (false);
return (true);
}
static void
-hn_rxvf_change(struct hn_softc *sc, struct ifnet *ifp, bool rxvf)
+hn_rxvf_change(struct hn_softc *sc, if_t ifp, bool rxvf)
{
- struct ifnet *hn_ifp;
+ if_t hn_ifp;
HN_LOCK(sc);
@@ -1209,7 +1209,7 @@
goto out;
sc->hn_flags &= ~HN_FLAG_RXVF;
- if (hn_ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(hn_ifp) & IFF_DRV_RUNNING)
hn_rxfilter_config(sc);
else
hn_set_rxfilter(sc, NDIS_PACKET_TYPE_NONE);
@@ -1231,19 +1231,19 @@
hn_resume_mgmt(sc);
}
- devctl_notify("HYPERV_NIC_VF", hn_ifp->if_xname,
+ devctl_notify("HYPERV_NIC_VF", if_name(hn_ifp),
rxvf ? "VF_UP" : "VF_DOWN", NULL);
if (bootverbose) {
if_printf(hn_ifp, "datapath is switched %s %s\n",
- rxvf ? "to" : "from", ifp->if_xname);
+ rxvf ? "to" : "from", if_name(ifp));
}
out:
HN_UNLOCK(sc);
}
static void
-hn_ifnet_event(void *arg, struct ifnet *ifp, int event)
+hn_ifnet_event(void *arg, if_t ifp, int event)
{
if (event != IFNET_EVENT_UP && event != IFNET_EVENT_DOWN)
@@ -1252,16 +1252,16 @@
}
static void
-hn_ifaddr_event(void *arg, struct ifnet *ifp)
+hn_ifaddr_event(void *arg, if_t ifp)
{
- hn_rxvf_change(arg, ifp, ifp->if_flags & IFF_UP);
+ hn_rxvf_change(arg, ifp, if_getflags(ifp) & IFF_UP);
}
static int
hn_xpnt_vf_iocsetcaps(struct hn_softc *sc, struct ifreq *ifr)
{
- struct ifnet *ifp, *vf_ifp;
+ if_t ifp, vf_ifp;
uint64_t tmp;
int error;
@@ -1273,9 +1273,9 @@
* Fix up requested capabilities w/ supported capabilities,
* since the supported capabilities could have been changed.
*/
- ifr->ifr_reqcap &= ifp->if_capabilities;
+ ifr->ifr_reqcap &= if_getcapabilities(ifp);
/* Pass SIOCSIFCAP to VF. */
- error = vf_ifp->if_ioctl(vf_ifp, SIOCSIFCAP, (caddr_t)ifr);
+ error = ifhwioctl(SIOCSIFCAP, vf_ifp, (caddr_t)ifr, curthread);
/*
* NOTE:
@@ -1286,31 +1286,31 @@
/*
* Merge VF's enabled capabilities.
*/
- ifp->if_capenable = vf_ifp->if_capenable & ifp->if_capabilities;
+ if_setcapenable(ifp, if_getcapenable(vf_ifp) & if_getcapabilities(ifp));
- tmp = vf_ifp->if_hwassist & HN_CSUM_IP_HWASSIST(sc);
- if (ifp->if_capenable & IFCAP_TXCSUM)
- ifp->if_hwassist |= tmp;
+ tmp = if_gethwassist(vf_ifp) & HN_CSUM_IP_HWASSIST(sc);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM)
+ if_sethwassistbits(ifp, tmp, 0);
else
- ifp->if_hwassist &= ~tmp;
+ if_sethwassistbits(ifp, 0, tmp);
- tmp = vf_ifp->if_hwassist & HN_CSUM_IP6_HWASSIST(sc);
- if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
- ifp->if_hwassist |= tmp;
+ tmp = if_gethwassist(vf_ifp) & HN_CSUM_IP6_HWASSIST(sc);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM_IPV6)
+ if_sethwassistbits(ifp, tmp, 0);
else
- ifp->if_hwassist &= ~tmp;
+ if_sethwassistbits(ifp, 0, tmp);
- tmp = vf_ifp->if_hwassist & CSUM_IP_TSO;
- if (ifp->if_capenable & IFCAP_TSO4)
- ifp->if_hwassist |= tmp;
+ tmp = if_gethwassist(vf_ifp) & CSUM_IP_TSO;
+ if (if_getcapenable(ifp) & IFCAP_TSO4)
+ if_sethwassistbits(ifp, tmp, 0);
else
- ifp->if_hwassist &= ~tmp;
+ if_sethwassistbits(ifp, 0, tmp);
- tmp = vf_ifp->if_hwassist & CSUM_IP6_TSO;
- if (ifp->if_capenable & IFCAP_TSO6)
- ifp->if_hwassist |= tmp;
+ tmp = if_gethwassist(vf_ifp) & CSUM_IP6_TSO;
+ if (if_getcapenable(ifp) & IFCAP_TSO6)
+ if_sethwassistbits(ifp, tmp, 0);
else
- ifp->if_hwassist &= ~tmp;
+ if_sethwassistbits(ifp, 0, tmp);
return (error);
}
@@ -1318,48 +1318,48 @@
static int
hn_xpnt_vf_iocsetflags(struct hn_softc *sc)
{
- struct ifnet *vf_ifp;
+ if_t vf_ifp;
struct ifreq ifr;
HN_LOCK_ASSERT(sc);
vf_ifp = sc->hn_vf_ifp;
memset(&ifr, 0, sizeof(ifr));
- strlcpy(ifr.ifr_name, vf_ifp->if_xname, sizeof(ifr.ifr_name));
- ifr.ifr_flags = vf_ifp->if_flags & 0xffff;
- ifr.ifr_flagshigh = vf_ifp->if_flags >> 16;
- return (vf_ifp->if_ioctl(vf_ifp, SIOCSIFFLAGS, (caddr_t)&ifr));
+ strlcpy(ifr.ifr_name, if_name(vf_ifp), sizeof(ifr.ifr_name));
+ ifr.ifr_flags = if_getflags(vf_ifp) & 0xffff;
+ ifr.ifr_flagshigh = if_getflags(vf_ifp) >> 16;
+ return (ifhwioctl(SIOCSIFFLAGS, vf_ifp, (caddr_t)&ifr, curthread));
}
static void
hn_xpnt_vf_saveifflags(struct hn_softc *sc)
{
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
int allmulti = 0;
HN_LOCK_ASSERT(sc);
/* XXX vlan(4) style mcast addr maintenance */
- if (!CK_STAILQ_EMPTY(&ifp->if_multiaddrs))
+ if (if_maddr_count(ifp) != 0)
allmulti = IFF_ALLMULTI;
/* Always set the VF's if_flags */
- sc->hn_vf_ifp->if_flags = ifp->if_flags | allmulti;
+ if_setflags(sc->hn_vf_ifp, if_getflags(ifp) | allmulti);
}
static void
-hn_xpnt_vf_input(struct ifnet *vf_ifp, struct mbuf *m)
+hn_xpnt_vf_input(if_t vf_ifp, struct mbuf *m)
{
struct rm_priotracker pt;
- struct ifnet *hn_ifp = NULL;
+ if_t hn_ifp = NULL;
struct mbuf *mn;
/*
* XXX racy, if hn(4) ever detached.
*/
rm_rlock(&hn_vfmap_lock, &pt);
- if (vf_ifp->if_index < hn_vfmap_size)
- hn_ifp = hn_vfmap[vf_ifp->if_index];
+ if (if_getindex(vf_ifp) < hn_vfmap_size)
+ hn_ifp = hn_vfmap[if_getindex(vf_ifp)];
rm_runlock(&hn_vfmap_lock, &pt);
if (hn_ifp != NULL) {
@@ -1372,7 +1372,7 @@
/*
* Update VF stats.
*/
- if ((vf_ifp->if_capenable & IFCAP_HWSTATS) == 0) {
+ if ((if_getcapenable(vf_ifp) & IFCAP_HWSTATS) == 0) {
if_inc_counter(vf_ifp, IFCOUNTER_IBYTES,
mn->m_pkthdr.len);
}
@@ -1394,7 +1394,7 @@
/*
* Go through hn(4)'s if_input.
*/
- hn_ifp->if_input(hn_ifp, m);
+ if_input(hn_ifp, m);
} else {
/*
* In the middle of the transition; free this
@@ -1412,12 +1412,12 @@
static void
hn_mtu_change_fixup(struct hn_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
HN_LOCK_ASSERT(sc);
ifp = sc->hn_ifp;
- hn_set_tso_maxsize(sc, hn_tso_maxlen, ifp->if_mtu);
+ hn_set_tso_maxsize(sc, hn_tso_maxlen, if_getmtu(ifp));
if (sc->hn_rx_ring[0].hn_lro.lro_length_lim < HN_LRO_LENLIM_MIN(ifp))
hn_set_lro_lenlim(sc, HN_LRO_LENLIM_MIN(ifp));
}
@@ -1483,7 +1483,7 @@
static void
hn_vf_rss_fixup(struct hn_softc *sc, bool reconf)
{
- struct ifnet *ifp, *vf_ifp;
+ if_t ifp, vf_ifp;
struct ifrsshash ifrh;
struct ifrsskey ifrk;
int error;
@@ -1491,7 +1491,7 @@
HN_LOCK_ASSERT(sc);
KASSERT(sc->hn_flags & HN_FLAG_SYNTH_ATTACHED,
- ("%s: synthetic parts are not attached", sc->hn_ifp->if_xname));
+ ("%s: synthetic parts are not attached", if_name(sc->hn_ifp)));
if (sc->hn_rx_ring_inuse == 1) {
/* No RSS on synthetic parts; done. */
@@ -1510,21 +1510,21 @@
* supported.
*/
memset(&ifrk, 0, sizeof(ifrk));
- strlcpy(ifrk.ifrk_name, vf_ifp->if_xname, sizeof(ifrk.ifrk_name));
- error = vf_ifp->if_ioctl(vf_ifp, SIOCGIFRSSKEY, (caddr_t)&ifrk);
+ strlcpy(ifrk.ifrk_name, if_name(vf_ifp), sizeof(ifrk.ifrk_name));
+ error = ifhwioctl(SIOCGIFRSSKEY, vf_ifp, (caddr_t)&ifrk, curthread);
if (error) {
if_printf(ifp, "%s SIOCGIFRSSKEY failed: %d\n",
- vf_ifp->if_xname, error);
+ if_name(vf_ifp), error);
goto done;
}
if (ifrk.ifrk_func != RSS_FUNC_TOEPLITZ) {
if_printf(ifp, "%s RSS function %u is not Toeplitz\n",
- vf_ifp->if_xname, ifrk.ifrk_func);
+ if_name(vf_ifp), ifrk.ifrk_func);
goto done;
}
if (ifrk.ifrk_keylen != NDIS_HASH_KEYSIZE_TOEPLITZ) {
if_printf(ifp, "%s invalid RSS Toeplitz key length %d\n",
- vf_ifp->if_xname, ifrk.ifrk_keylen);
+ if_name(vf_ifp), ifrk.ifrk_keylen);
goto done;
}
@@ -1532,16 +1532,16 @@
* Extract VF's RSS hash. Only Toeplitz is supported.
*/
memset(&ifrh, 0, sizeof(ifrh));
- strlcpy(ifrh.ifrh_name, vf_ifp->if_xname, sizeof(ifrh.ifrh_name));
- error = vf_ifp->if_ioctl(vf_ifp, SIOCGIFRSSHASH, (caddr_t)&ifrh);
+ strlcpy(ifrh.ifrh_name, if_name(vf_ifp), sizeof(ifrh.ifrh_name));
+ error = ifhwioctl(SIOCGIFRSSHASH, vf_ifp, (caddr_t)&ifrh, curthread);
if (error) {
if_printf(ifp, "%s SIOCGRSSHASH failed: %d\n",
- vf_ifp->if_xname, error);
+ if_name(vf_ifp), error);
goto done;
}
if (ifrh.ifrh_func != RSS_FUNC_TOEPLITZ) {
if_printf(ifp, "%s RSS function %u is not Toeplitz\n",
- vf_ifp->if_xname, ifrh.ifrh_func);
+ if_name(vf_ifp), ifrh.ifrh_func);
goto done;
}
@@ -1549,7 +1549,7 @@
if ((ifrh.ifrh_types & my_types) == 0) {
/* This disables RSS; ignore it then */
if_printf(ifp, "%s intersection of RSS types failed. "
- "VF %#x, mine %#x\n", vf_ifp->if_xname,
+ "VF %#x, mine %#x\n", if_name(vf_ifp),
ifrh.ifrh_types, my_types);
goto done;
}
@@ -1650,7 +1650,7 @@
HN_LOCK_ASSERT(sc);
KASSERT(sc->hn_flags & HN_FLAG_SYNTH_ATTACHED,
- ("%s: synthetic parts are not attached", sc->hn_ifp->if_xname));
+ ("%s: synthetic parts are not attached", if_name(sc->hn_ifp)));
if (sc->hn_rx_ring_inuse == 1)
goto done;
@@ -1677,7 +1677,7 @@
static void
hn_xpnt_vf_setready(struct hn_softc *sc)
{
- struct ifnet *ifp, *vf_ifp;
+ if_t ifp, vf_ifp;
struct ifreq ifr;
HN_LOCK_ASSERT(sc);
@@ -1692,10 +1692,10 @@
/*
* Save information for restoration.
*/
- sc->hn_saved_caps = ifp->if_capabilities;
- sc->hn_saved_tsomax = ifp->if_hw_tsomax;
- sc->hn_saved_tsosegcnt = ifp->if_hw_tsomaxsegcount;
- sc->hn_saved_tsosegsz = ifp->if_hw_tsomaxsegsize;
+ sc->hn_saved_caps = if_getcapabilities(ifp);
+ sc->hn_saved_tsomax = if_gethwtsomax(ifp);
+ sc->hn_saved_tsosegcnt = if_gethwtsomaxsegcount(ifp);
+ sc->hn_saved_tsosegsz = if_gethwtsomaxsegsize(ifp);
/*
* Intersect supported/enabled capabilities.
@@ -1703,41 +1703,41 @@
* NOTE:
* if_hwassist is not changed here.
*/
- ifp->if_capabilities &= vf_ifp->if_capabilities;
- ifp->if_capenable &= ifp->if_capabilities;
+ if_setcapabilitiesbit(ifp, 0, if_getcapabilities(vf_ifp));
+ if_setcapenablebit(ifp, 0, if_getcapabilities(ifp));
/*
* Fix TSO settings.
*/
- if (ifp->if_hw_tsomax > vf_ifp->if_hw_tsomax)
- ifp->if_hw_tsomax = vf_ifp->if_hw_tsomax;
- if (ifp->if_hw_tsomaxsegcount > vf_ifp->if_hw_tsomaxsegcount)
- ifp->if_hw_tsomaxsegcount = vf_ifp->if_hw_tsomaxsegcount;
- if (ifp->if_hw_tsomaxsegsize > vf_ifp->if_hw_tsomaxsegsize)
- ifp->if_hw_tsomaxsegsize = vf_ifp->if_hw_tsomaxsegsize;
+ if (if_gethwtsomax(ifp) > if_gethwtsomax(vf_ifp))
+ if_sethwtsomax(ifp, if_gethwtsomax(vf_ifp));
+ if (if_gethwtsomaxsegcount(ifp) > if_gethwtsomaxsegcount(vf_ifp))
+ if_sethwtsomaxsegcount(ifp, if_gethwtsomaxsegcount(vf_ifp));
+ if (if_gethwtsomaxsegsize(ifp) > if_gethwtsomaxsegsize(vf_ifp))
+ if_sethwtsomaxsegsize(ifp, if_gethwtsomaxsegsize(vf_ifp));
/*
* Change VF's enabled capabilities.
*/
memset(&ifr, 0, sizeof(ifr));
- strlcpy(ifr.ifr_name, vf_ifp->if_xname, sizeof(ifr.ifr_name));
- ifr.ifr_reqcap = ifp->if_capenable;
+ strlcpy(ifr.ifr_name, if_name(vf_ifp), sizeof(ifr.ifr_name));
+ ifr.ifr_reqcap = if_getcapenable(ifp);
hn_xpnt_vf_iocsetcaps(sc, &ifr);
- if (ifp->if_mtu != ETHERMTU) {
+ if (if_getmtu(ifp) != ETHERMTU) {
int error;
/*
* Change VF's MTU.
*/
memset(&ifr, 0, sizeof(ifr));
- strlcpy(ifr.ifr_name, vf_ifp->if_xname, sizeof(ifr.ifr_name));
- ifr.ifr_mtu = ifp->if_mtu;
- error = vf_ifp->if_ioctl(vf_ifp, SIOCSIFMTU, (caddr_t)&ifr);
+ strlcpy(ifr.ifr_name, if_name(vf_ifp), sizeof(ifr.ifr_name));
+ ifr.ifr_mtu = if_getmtu(ifp);
+ error = ifhwioctl(SIOCSIFMTU, vf_ifp, (caddr_t)&ifr, curthread);
if (error) {
if_printf(ifp, "%s SIOCSIFMTU %u failed\n",
- vf_ifp->if_xname, ifp->if_mtu);
- if (ifp->if_mtu > ETHERMTU) {
+ if_name(vf_ifp), if_getmtu(ifp));
+ if (if_getmtu(ifp) > ETHERMTU) {
if_printf(ifp, "change MTU to %d\n", ETHERMTU);
/*
@@ -1746,7 +1746,7 @@
* failure of the adjustment will cause us
* infinite headache.
*/
- ifp->if_mtu = ETHERMTU;
+ if_setmtu(ifp, ETHERMTU);
hn_mtu_change_fixup(sc);
}
}
@@ -1815,22 +1815,22 @@
HN_LOCK_ASSERT(sc);
KASSERT((sc->hn_xvf_flags & HN_XVFFLAG_ENABLED) == 0,
- ("%s: transparent VF was enabled", sc->hn_ifp->if_xname));
+ ("%s: transparent VF was enabled", if_name(sc->hn_ifp)));
if (bootverbose) {
if_printf(sc->hn_ifp, "try bringing up %s\n",
- sc->hn_vf_ifp->if_xname);
+ if_name(sc->hn_vf_ifp));
}
/*
* Bring the VF up.
*/
hn_xpnt_vf_saveifflags(sc);
- sc->hn_vf_ifp->if_flags |= IFF_UP;
+ if_setflagbits(sc->hn_ifp, IFF_UP, 0);
error = hn_xpnt_vf_iocsetflags(sc);
if (error) {
if_printf(sc->hn_ifp, "bringing up %s failed: %d\n",
- sc->hn_vf_ifp->if_xname, error);
+ if_name(sc->hn_vf_ifp), error);
return;
}
@@ -1870,13 +1870,13 @@
hn_xpnt_vf_setready(sc);
}
- if (sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ if (if_getdrvflags(sc->hn_ifp) & IFF_DRV_RUNNING) {
/*
* Delayed VF initialization.
*/
if (bootverbose) {
if_printf(sc->hn_ifp, "delayed initialize %s\n",
- sc->hn_vf_ifp->if_xname);
+ if_name(sc->hn_vf_ifp));
}
hn_xpnt_vf_init(sc);
}
@@ -1885,7 +1885,7 @@
}
static void
-hn_ifnet_attevent(void *xsc, struct ifnet *ifp)
+hn_ifnet_attevent(void *xsc, if_t ifp)
{
struct hn_softc *sc = xsc;
@@ -1899,47 +1899,48 @@
if (sc->hn_vf_ifp != NULL) {
if_printf(sc->hn_ifp, "%s was attached as VF\n",
- sc->hn_vf_ifp->if_xname);
+ if_name(sc->hn_vf_ifp));
goto done;
}
- if (hn_xpnt_vf && ifp->if_start != NULL) {
+ if (hn_xpnt_vf && if_getstartfn(ifp) != NULL) {
/*
* ifnet.if_start is _not_ supported by transparent
* mode VF; mainly due to the IFF_DRV_OACTIVE flag.
*/
if_printf(sc->hn_ifp, "%s uses if_start, which is unsupported "
- "in transparent VF mode.\n", ifp->if_xname);
+ "in transparent VF mode.\n", if_name(sc->hn_vf_ifp));
+
goto done;
}
rm_wlock(&hn_vfmap_lock);
- if (ifp->if_index >= hn_vfmap_size) {
- struct ifnet **newmap;
+ if (if_getindex(ifp) >= hn_vfmap_size) {
+ if_t *newmap;
int newsize;
- newsize = ifp->if_index + HN_VFMAP_SIZE_DEF;
- newmap = malloc(sizeof(struct ifnet *) * newsize, M_DEVBUF,
+ newsize = if_getindex(ifp) + HN_VFMAP_SIZE_DEF;
+ newmap = malloc(sizeof(if_t) * newsize, M_DEVBUF,
M_WAITOK | M_ZERO);
memcpy(newmap, hn_vfmap,
- sizeof(struct ifnet *) * hn_vfmap_size);
+ sizeof(if_t) * hn_vfmap_size);
free(hn_vfmap, M_DEVBUF);
hn_vfmap = newmap;
hn_vfmap_size = newsize;
}
- KASSERT(hn_vfmap[ifp->if_index] == NULL,
+ KASSERT(hn_vfmap[if_getindex(ifp)] == NULL,
("%s: ifindex %d was mapped to %s",
- ifp->if_xname, ifp->if_index, hn_vfmap[ifp->if_index]->if_xname));
- hn_vfmap[ifp->if_index] = sc->hn_ifp;
+ if_name(ifp), if_getindex(ifp), if_name(hn_vfmap[if_getindex(ifp)])));
+ hn_vfmap[if_getindex(ifp)] = sc->hn_ifp;
rm_wunlock(&hn_vfmap_lock);
/* NOTE: hn_vf_lock for hn_transmit()/hn_qflush() */
rm_wlock(&sc->hn_vf_lock);
KASSERT((sc->hn_xvf_flags & HN_XVFFLAG_ENABLED) == 0,
- ("%s: transparent VF was enabled", sc->hn_ifp->if_xname));
+ ("%s: transparent VF was enabled", if_name(sc->hn_ifp)));
sc->hn_vf_ifp = ifp;
rm_wunlock(&sc->hn_vf_lock);
@@ -1950,8 +1951,8 @@
* Install if_input for vf_ifp, which does vf_ifp -> hn_ifp.
* Save vf_ifp's current if_input for later restoration.
*/
- sc->hn_vf_input = ifp->if_input;
- ifp->if_input = hn_xpnt_vf_input;
+ sc->hn_vf_input = if_getinputfn(ifp);
+ if_setinputfn(ifp, hn_xpnt_vf_input);
/*
* Stop link status management; use the VF's.
@@ -1972,7 +1973,7 @@
}
static void
-hn_ifnet_detevent(void *xsc, struct ifnet *ifp)
+hn_ifnet_detevent(void *xsc, if_t ifp)
{
struct hn_softc *sc = xsc;
@@ -2001,8 +2002,8 @@
HN_LOCK(sc);
KASSERT(sc->hn_vf_input != NULL, ("%s VF input is not saved",
- sc->hn_ifp->if_xname));
- ifp->if_input = sc->hn_vf_input;
+ if_name(sc->hn_ifp)));
+ if_setinputfn(ifp, sc->hn_vf_input);
sc->hn_vf_input = NULL;
if ((sc->hn_flags & HN_FLAG_SYNTH_ATTACHED) &&
@@ -2013,7 +2014,7 @@
/*
* The VF was ready; restore some settings.
*/
- sc->hn_ifp->if_capabilities = sc->hn_saved_caps;
+ if_setcapabilities(ifp, sc->hn_saved_caps);
/*
* NOTE:
* There is _no_ need to fixup if_capenable and
@@ -2022,10 +2023,10 @@
* if_capabilites and the synthetic device's
* if_capabilites.
*/
- sc->hn_ifp->if_hw_tsomax = sc->hn_saved_tsomax;
- sc->hn_ifp->if_hw_tsomaxsegcount =
- sc->hn_saved_tsosegcnt;
- sc->hn_ifp->if_hw_tsomaxsegsize = sc->hn_saved_tsosegsz;
+ if_sethwtsomax(ifp, sc->hn_saved_tsomax);
+ if_sethwtsomaxsegcount(sc->hn_ifp,
+ sc->hn_saved_tsosegcnt);
+ if_sethwtsomaxsegsize(ifp, sc->hn_saved_tsosegsz);
}
if (sc->hn_flags & HN_FLAG_SYNTH_ATTACHED) {
@@ -2047,14 +2048,14 @@
rm_wlock(&hn_vfmap_lock);
- KASSERT(ifp->if_index < hn_vfmap_size,
- ("ifindex %d, vfmapsize %d", ifp->if_index, hn_vfmap_size));
- if (hn_vfmap[ifp->if_index] != NULL) {
- KASSERT(hn_vfmap[ifp->if_index] == sc->hn_ifp,
+ KASSERT(if_getindex(ifp) < hn_vfmap_size,
+ ("ifindex %d, vfmapsize %d", if_getindex(ifp), hn_vfmap_size));
+ if (hn_vfmap[if_getindex(ifp)] != NULL) {
+ KASSERT(hn_vfmap[if_getindex(ifp)] == sc->hn_ifp,
("%s: ifindex %d was mapped to %s",
- ifp->if_xname, ifp->if_index,
- hn_vfmap[ifp->if_index]->if_xname));
- hn_vfmap[ifp->if_index] = NULL;
+ if_name(ifp), if_getindex(ifp),
+ if_name(hn_vfmap[if_getindex(ifp)])));
+ hn_vfmap[if_getindex(ifp)] = NULL;
}
rm_wunlock(&hn_vfmap_lock);
@@ -2063,7 +2064,7 @@
}
static void
-hn_ifnet_lnkevent(void *xsc, struct ifnet *ifp, int link_state)
+hn_ifnet_lnkevent(void *xsc, if_t ifp, int link_state)
{
struct hn_softc *sc = xsc;
@@ -2071,6 +2072,42 @@
if_link_state_change(sc->hn_ifp, link_state);
}
+static int
+hn_tsomax_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct hn_softc *sc = arg1;
+ unsigned int tsomax;
+ int error;
+
+ tsomax = if_gethwtsomax(sc->hn_ifp);
+ error = sysctl_handle_int(oidp, &tsomax, 0, req);
+ return error;
+}
+
+static int
+hn_tsomaxsegcnt_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct hn_softc *sc = arg1;
+ unsigned int tsomax;
+ int error;
+
+ tsomax = if_gethwtsomaxsegcount(sc->hn_ifp);
+ error = sysctl_handle_int(oidp, &tsomax, 0, req);
+ return error;
+}
+
+static int
+hn_tsomaxsegsz_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct hn_softc *sc = arg1;
+ unsigned int tsomax;
+ int error;
+
+ tsomax = if_gethwtsomaxsegsize(sc->hn_ifp);
+ error = sysctl_handle_int(oidp, &tsomax, 0, req);
+ return error;
+}
+
static int
hn_probe(device_t dev)
{
@@ -2089,7 +2126,7 @@
struct sysctl_oid_list *child;
struct sysctl_ctx_list *ctx;
uint8_t eaddr[ETHER_ADDR_LEN];
- struct ifnet *ifp = NULL;
+ if_t ifp = NULL;
int error, ring_cnt, tx_ring_cnt;
uint32_t mtu;
@@ -2156,7 +2193,7 @@
* ether_ifattach().
*/
ifp = sc->hn_ifp = if_alloc(IFT_ETHER);
- ifp->if_softc = sc;
+ if_setsoftc(ifp, sc);
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
/*
@@ -2281,14 +2318,15 @@
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "hwassist",
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
hn_hwassist_sysctl, "A", "hwassist");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "tso_max",
- CTLFLAG_RD, &ifp->if_hw_tsomax, 0, "max TSO size");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "tso_maxsegcnt",
- CTLFLAG_RD, &ifp->if_hw_tsomaxsegcount, 0,
- "max # of TSO segments");
- SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "tso_maxsegsz",
- CTLFLAG_RD, &ifp->if_hw_tsomaxsegsize, 0,
- "max size of TSO segment");
+ SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tso_max",
+ CTLTYPE_UINT | CTLFLAG_RD, sc, 0, hn_tsomax_sysctl,
+ "IU", "max TSO size");
+ SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tso_maxsegcnt",
+ CTLTYPE_UINT | CTLFLAG_RD, sc, 0, hn_tsomaxsegcnt_sysctl,
+ "IU", "max # of TSO segments");
+ SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "tso_maxsegsz",
+ CTLTYPE_UINT | CTLFLAG_RD, sc, 0, hn_tsomaxsegsz_sysctl,
+ "IU", "max size of TSO segment");
SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rxfilter",
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
hn_rxfilter_sysctl, "A", "rxfilter");
@@ -2370,60 +2408,59 @@
* Setup the ifnet for this interface.
*/
- ifp->if_baudrate = IF_Gbps(10);
- ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
- ifp->if_ioctl = hn_ioctl;
- ifp->if_init = hn_init;
+ if_setbaudrate(ifp, IF_Gbps(10));
+ if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
+ if_setioctlfn(ifp, hn_ioctl);
+ if_setinitfn(ifp, hn_init);
#ifdef HN_IFSTART_SUPPORT
if (hn_use_if_start) {
int qdepth = hn_get_txswq_depth(&sc->hn_tx_ring[0]);
- ifp->if_start = hn_start;
- IFQ_SET_MAXLEN(&ifp->if_snd, qdepth);
- ifp->if_snd.ifq_drv_maxlen = qdepth - 1;
- IFQ_SET_READY(&ifp->if_snd);
+ if_setstartfn(ifp, hn_start);
+ if_setsendqlen(ifp, qdepth);
+ if_setsendqready(ifp);
} else
#endif
{
- ifp->if_transmit = hn_transmit;
- ifp->if_qflush = hn_xmit_qflush;
+ if_settransmitfn(ifp, hn_transmit);
+ if_setqflushfn(ifp, hn_xmit_qflush);
}
- ifp->if_capabilities |= IFCAP_RXCSUM | IFCAP_LRO | IFCAP_LINKSTATE;
+ if_setcapabilitiesbit(ifp, IFCAP_RXCSUM | IFCAP_LRO | IFCAP_LINKSTATE, 0);
#ifdef foo
/* We can't diff IPv6 packets from IPv4 packets on RX path. */
- ifp->if_capabilities |= IFCAP_RXCSUM_IPV6;
+ if_setcapabilitiesbit(ifp, IFCAP_RXCSUM_IPV6, 0);
#endif
if (sc->hn_caps & HN_CAP_VLAN) {
/* XXX not sure about VLAN_MTU. */
- ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
+ if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU, 0);
}
- ifp->if_hwassist = sc->hn_tx_ring[0].hn_csum_assist;
- if (ifp->if_hwassist & HN_CSUM_IP_MASK)
- ifp->if_capabilities |= IFCAP_TXCSUM;
- if (ifp->if_hwassist & HN_CSUM_IP6_MASK)
- ifp->if_capabilities |= IFCAP_TXCSUM_IPV6;
+ if_sethwassist(ifp, sc->hn_tx_ring[0].hn_csum_assist);
+ if (if_gethwassist(ifp) & HN_CSUM_IP_MASK)
+ if_setcapabilitiesbit(ifp, IFCAP_TXCSUM, 0);
+ if (if_gethwassist(ifp) & HN_CSUM_IP6_MASK)
+ if_setcapabilitiesbit(ifp, IFCAP_TXCSUM_IPV6, 0);
if (sc->hn_caps & HN_CAP_TSO4) {
- ifp->if_capabilities |= IFCAP_TSO4;
- ifp->if_hwassist |= CSUM_IP_TSO;
+ if_setcapabilitiesbit(ifp, IFCAP_TSO4, 0);
+ if_sethwassistbits(ifp, CSUM_IP_TSO, 0);
}
if (sc->hn_caps & HN_CAP_TSO6) {
- ifp->if_capabilities |= IFCAP_TSO6;
- ifp->if_hwassist |= CSUM_IP6_TSO;
+ if_setcapabilitiesbit(ifp, IFCAP_TSO6, 0);
+ if_sethwassistbits(ifp, CSUM_IP6_TSO, 0);
}
/* Enable all available capabilities by default. */
- ifp->if_capenable = ifp->if_capabilities;
+ if_setcapenable(ifp, if_getcapabilities(ifp));
/*
* Disable IPv6 TSO and TXCSUM by default, they still can
* be enabled through SIOCSIFCAP.
*/
- ifp->if_capenable &= ~(IFCAP_TXCSUM_IPV6 | IFCAP_TSO6);
- ifp->if_hwassist &= ~(HN_CSUM_IP6_MASK | CSUM_IP6_TSO);
+ if_setcapenablebit(ifp, 0, (IFCAP_TXCSUM_IPV6 | IFCAP_TSO6));
+ if_sethwassistbits(ifp, 0, (HN_CSUM_IP6_MASK | CSUM_IP6_TSO));
- if (ifp->if_capabilities & (IFCAP_TSO6 | IFCAP_TSO4)) {
+ if (if_getcapabilities(ifp) & (IFCAP_TSO6 | IFCAP_TSO4)) {
/*
* Lock hn_set_tso_maxsize() to simplify its
* internal logic.
@@ -2431,23 +2468,23 @@
HN_LOCK(sc);
hn_set_tso_maxsize(sc, hn_tso_maxlen, ETHERMTU);
HN_UNLOCK(sc);
- ifp->if_hw_tsomaxsegcount = HN_TX_DATA_SEGCNT_MAX;
- ifp->if_hw_tsomaxsegsize = PAGE_SIZE;
+ if_sethwtsomaxsegcount(ifp, HN_TX_DATA_SEGCNT_MAX);
+ if_sethwtsomaxsegsize(ifp, PAGE_SIZE);
}
ether_ifattach(ifp, eaddr);
- if ((ifp->if_capabilities & (IFCAP_TSO6 | IFCAP_TSO4)) && bootverbose) {
+ if ((if_getcapabilities(ifp) & (IFCAP_TSO6 | IFCAP_TSO4)) && bootverbose) {
if_printf(ifp, "TSO segcnt %u segsz %u\n",
- ifp->if_hw_tsomaxsegcount, ifp->if_hw_tsomaxsegsize);
+ if_gethwtsomaxsegcount(ifp), if_gethwtsomaxsegsize(ifp));
}
if (mtu < ETHERMTU) {
- if_printf(ifp, "fixup mtu %u -> %u\n", ifp->if_mtu, mtu);
- ifp->if_mtu = mtu;
+
+ if_setmtu(ifp, mtu);
}
/* Inform the upper layer about the long frame support. */
- ifp->if_hdrlen = sizeof(struct ether_vlan_header);
+ if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
/*
* Kick off link status check.
@@ -2488,7 +2525,7 @@
hn_detach(device_t dev)
{
struct hn_softc *sc = device_get_softc(dev);
- struct ifnet *ifp = sc->hn_ifp, *vf_ifp;
+ if_t ifp = sc->hn_ifp, vf_ifp;
if (sc->hn_xact != NULL && vmbus_chan_is_revoked(sc->hn_prichan)) {
/*
@@ -2521,7 +2558,7 @@
if (device_is_attached(dev)) {
HN_LOCK(sc);
if (sc->hn_flags & HN_FLAG_SYNTH_ATTACHED) {
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
hn_stop(sc, true);
/*
* NOTE:
@@ -2932,7 +2969,7 @@
}
static __inline int
-hn_flush_txagg(struct ifnet *ifp, struct hn_tx_ring *txr)
+hn_flush_txagg(if_t ifp, struct hn_tx_ring *txr)
{
struct hn_txdesc *txd;
struct mbuf *m;
@@ -2973,7 +3010,7 @@
}
static void *
-hn_try_txagg(struct ifnet *ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd,
+hn_try_txagg(if_t ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd,
int pktsize)
{
void *chim;
@@ -3046,7 +3083,7 @@
* If this function fails, then both txd and m_head0 will be freed.
*/
static int
-hn_encap(struct ifnet *ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd,
+hn_encap(if_t ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd,
struct mbuf **m_head0)
{
bus_dma_segment_t segs[HN_TX_DATA_SEGCNT_MAX];
@@ -3259,12 +3296,12 @@
* associated w/ the txd will _not_ be freed.
*/
static int
-hn_txpkt(struct ifnet *ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd)
+hn_txpkt(if_t ifp, struct hn_tx_ring *txr, struct hn_txdesc *txd)
{
int error, send_failed = 0, has_bpf;
again:
- has_bpf = bpf_peers_present(ifp->if_bpf);
+ has_bpf = bpf_peers_present(if_getbpf(ifp));
if (has_bpf) {
/*
* Make sure that this txd and any aggregated txds are not
@@ -3416,7 +3453,7 @@
static int
hn_rxpkt(struct hn_rx_ring *rxr)
{
- struct ifnet *ifp, *hn_ifp = rxr->hn_ifp;
+ if_t ifp, hn_ifp = rxr->hn_ifp;
struct mbuf *m_new, *n;
int size, do_lro = 0, do_csum = 1, is_vf = 0;
int hash_type = M_HASHTYPE_NONE;
@@ -3436,7 +3473,7 @@
is_vf = 1;
}
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
/*
* NOTE:
* See the NOTE of hn_rndis_init_fixat(). This
@@ -3498,7 +3535,7 @@
m_new->m_pkthdr.rcvif = ifp;
- if (__predict_false((hn_ifp->if_capenable & IFCAP_RXCSUM) == 0))
+ if (__predict_false((if_getcapenable(hn_ifp) & IFCAP_RXCSUM) == 0))
do_csum = 0;
/* receive side checksum offload */
@@ -3704,7 +3741,7 @@
}
rxr->hn_pkts++;
- if ((hn_ifp->if_capenable & IFCAP_LRO) && do_lro) {
+ if ((if_getcapenable(hn_ifp) & IFCAP_LRO) && do_lro) {
#if defined(INET) || defined(INET6)
struct lro_ctrl *lro = &rxr->hn_lro;
@@ -3717,17 +3754,17 @@
}
#endif
}
- ifp->if_input(ifp, m_new);
+ if_input(ifp, m_new);
return (0);
}
static int
-hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+hn_ioctl(if_t ifp, u_long cmd, caddr_t data)
{
- struct hn_softc *sc = ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(ifp);
struct ifreq *ifr = (struct ifreq *)data, ifr_vf;
- struct ifnet *vf_ifp;
+ if_t vf_ifp;
int mask, error = 0;
struct ifrsskey *ifrk;
struct ifrsshash *ifrh;
@@ -3754,7 +3791,7 @@
break;
}
- if (ifp->if_mtu == ifr->ifr_mtu) {
+ if (if_getmtu(ifp) == ifr->ifr_mtu) {
HN_UNLOCK(sc);
break;
}
@@ -3762,14 +3799,14 @@
if (hn_xpnt_vf_isready(sc)) {
vf_ifp = sc->hn_vf_ifp;
ifr_vf = *ifr;
- strlcpy(ifr_vf.ifr_name, vf_ifp->if_xname,
+ strlcpy(ifr_vf.ifr_name, if_name(vf_ifp),
sizeof(ifr_vf.ifr_name));
- error = vf_ifp->if_ioctl(vf_ifp, SIOCSIFMTU,
- (caddr_t)&ifr_vf);
+ error = ifhwioctl(SIOCSIFMTU,vf_ifp,
+ (caddr_t)&ifr_vf, curthread);
if (error) {
HN_UNLOCK(sc);
if_printf(ifp, "%s SIOCSIFMTU %d failed: %d\n",
- vf_ifp->if_xname, ifr->ifr_mtu, error);
+ if_name(vf_ifp), ifr->ifr_mtu, error);
break;
}
}
@@ -3811,7 +3848,7 @@
if_printf(ifp, "fixup mtu %d -> %u\n",
ifr->ifr_mtu, mtu);
}
- ifp->if_mtu = mtu;
+ if_setmtu(ifp, mtu);
/*
* Synthetic parts' reattach may change the chimney
@@ -3855,8 +3892,8 @@
if (hn_xpnt_vf_isready(sc))
hn_xpnt_vf_saveifflags(sc);
- if (ifp->if_flags & IFF_UP) {
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ if (if_getflags(ifp) & IFF_UP) {
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
/*
* Caller meight hold mutex, e.g.
* bpf; use busy-wait for the RNDIS
@@ -3872,10 +3909,10 @@
hn_init_locked(sc);
}
} else {
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
hn_stop(sc, false);
}
- sc->hn_if_flags = ifp->if_flags;
+ sc->hn_if_flags = if_getflags(ifp);
HN_UNLOCK(sc);
break;
@@ -3885,7 +3922,7 @@
if (hn_xpnt_vf_isready(sc)) {
ifr_vf = *ifr;
- strlcpy(ifr_vf.ifr_name, sc->hn_vf_ifp->if_xname,
+ strlcpy(ifr_vf.ifr_name, if_name(sc->hn_vf_ifp),
sizeof(ifr_vf.ifr_name));
error = hn_xpnt_vf_iocsetcaps(sc, &ifr_vf);
HN_UNLOCK(sc);
@@ -3896,49 +3933,49 @@
* Fix up requested capabilities w/ supported capabilities,
* since the supported capabilities could have been changed.
*/
- mask = (ifr->ifr_reqcap & ifp->if_capabilities) ^
- ifp->if_capenable;
+ mask = (ifr->ifr_reqcap & if_getcapabilities(ifp)) ^
+ if_getcapenable(ifp);
if (mask & IFCAP_TXCSUM) {
- ifp->if_capenable ^= IFCAP_TXCSUM;
- if (ifp->if_capenable & IFCAP_TXCSUM)
- ifp->if_hwassist |= HN_CSUM_IP_HWASSIST(sc);
+ if_togglecapenable(ifp, IFCAP_TXCSUM);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM)
+ if_sethwassistbits(ifp, HN_CSUM_IP_HWASSIST(sc), 0);
else
- ifp->if_hwassist &= ~HN_CSUM_IP_HWASSIST(sc);
+ if_sethwassistbits(ifp, 0, HN_CSUM_IP_HWASSIST(sc));
}
if (mask & IFCAP_TXCSUM_IPV6) {
- ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
- if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
- ifp->if_hwassist |= HN_CSUM_IP6_HWASSIST(sc);
+ if_togglecapenable(ifp, IFCAP_TXCSUM_IPV6);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM_IPV6)
+ if_sethwassistbits(ifp, HN_CSUM_IP6_HWASSIST(sc), 0);
else
- ifp->if_hwassist &= ~HN_CSUM_IP6_HWASSIST(sc);
+ if_sethwassistbits(ifp, 0, HN_CSUM_IP6_HWASSIST(sc));
}
/* TODO: flip RNDIS offload parameters for RXCSUM. */
if (mask & IFCAP_RXCSUM)
- ifp->if_capenable ^= IFCAP_RXCSUM;
+ if_togglecapenable(ifp, IFCAP_RXCSUM);
#ifdef foo
/* We can't diff IPv6 packets from IPv4 packets on RX path. */
if (mask & IFCAP_RXCSUM_IPV6)
- ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
+ if_togglecapenable(ifp, IFCAP_RXCSUM_IPV6);
#endif
if (mask & IFCAP_LRO)
- ifp->if_capenable ^= IFCAP_LRO;
+ if_togglecapenable(ifp, IFCAP_LRO);
if (mask & IFCAP_TSO4) {
- ifp->if_capenable ^= IFCAP_TSO4;
- if (ifp->if_capenable & IFCAP_TSO4)
- ifp->if_hwassist |= CSUM_IP_TSO;
+ if_togglecapenable(ifp, IFCAP_TSO4);
+ if (if_getcapenable(ifp) & IFCAP_TSO4)
+ if_sethwassistbits(ifp, CSUM_IP_TSO, 0);
else
- ifp->if_hwassist &= ~CSUM_IP_TSO;
+ if_sethwassistbits(ifp, 0, CSUM_IP_TSO);
}
if (mask & IFCAP_TSO6) {
- ifp->if_capenable ^= IFCAP_TSO6;
- if (ifp->if_capenable & IFCAP_TSO6)
- ifp->if_hwassist |= CSUM_IP6_TSO;
+ if_togglecapenable(ifp, IFCAP_TSO6);
+ if (if_getcapenable(ifp) & IFCAP_TSO6)
+ if_sethwassistbits(ifp, CSUM_IP6_TSO, 0);
else
- ifp->if_hwassist &= ~CSUM_IP6_TSO;
+ if_sethwassistbits(ifp, 0, CSUM_IP6_TSO);
}
HN_UNLOCK(sc);
@@ -3952,7 +3989,7 @@
HN_UNLOCK(sc);
break;
}
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
/*
* Multicast uses mutex; use busy-wait for
* the RNDIS reply.
@@ -3966,11 +4003,11 @@
if (hn_xpnt_vf_isready(sc)) {
int old_if_flags;
- old_if_flags = sc->hn_vf_ifp->if_flags;
+ old_if_flags = if_getflags(sc->hn_vf_ifp);
hn_xpnt_vf_saveifflags(sc);
if ((sc->hn_xvf_flags & HN_XVFFLAG_ENABLED) &&
- ((old_if_flags ^ sc->hn_vf_ifp->if_flags) &
+ ((old_if_flags ^ if_getflags(sc->hn_vf_ifp)) &
IFF_ALLMULTI))
error = hn_xpnt_vf_iocsetflags(sc);
}
@@ -3988,11 +4025,11 @@
* replace the ifr_name.
*/
vf_ifp = sc->hn_vf_ifp;
- strlcpy(ifr->ifr_name, vf_ifp->if_xname,
+ strlcpy(ifr->ifr_name, if_name(vf_ifp),
sizeof(ifr->ifr_name));
- error = vf_ifp->if_ioctl(vf_ifp, cmd, data);
+ error = ifhwioctl(cmd, vf_ifp, data, curthread);
/* Restore the ifr_name. */
- strlcpy(ifr->ifr_name, ifp->if_xname,
+ strlcpy(ifr->ifr_name, if_name(ifp),
sizeof(ifr->ifr_name));
HN_UNLOCK(sc);
break;
@@ -4048,7 +4085,7 @@
static void
hn_stop(struct hn_softc *sc, bool detaching)
{
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
int i;
HN_LOCK_ASSERT(sc);
@@ -4057,14 +4094,14 @@
("synthetic parts were not attached"));
/* Clear RUNNING bit ASAP. */
- atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_RUNNING);
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
/* Disable polling. */
hn_polling(sc, 0);
if (sc->hn_xvf_flags & HN_XVFFLAG_ENABLED) {
KASSERT(sc->hn_vf_ifp != NULL,
- ("%s: VF is not attached", ifp->if_xname));
+ ("%s: VF is not attached", if_name(ifp)));
/* Mark transparent mode VF as disabled. */
hn_xpnt_vf_setdisable(sc, false /* keep hn_vf_ifp */);
@@ -4080,7 +4117,7 @@
* Bring the VF down.
*/
hn_xpnt_vf_saveifflags(sc);
- sc->hn_vf_ifp->if_flags &= ~IFF_UP;
+ if_setflagbits(ifp, 0, IFF_UP);
hn_xpnt_vf_iocsetflags(sc);
}
@@ -4088,7 +4125,7 @@
hn_suspend_data(sc);
/* Clear OACTIVE bit. */
- atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
for (i = 0; i < sc->hn_tx_ring_inuse; ++i)
sc->hn_tx_ring[i].hn_oactive = 0;
@@ -4103,7 +4140,7 @@
static void
hn_init_locked(struct hn_softc *sc)
{
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
int i;
HN_LOCK_ASSERT(sc);
@@ -4111,14 +4148,14 @@
if ((sc->hn_flags & HN_FLAG_SYNTH_ATTACHED) == 0)
return;
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
return;
/* Configure RX filter */
hn_rxfilter_config(sc);
/* Clear OACTIVE bit. */
- atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
for (i = 0; i < sc->hn_tx_ring_inuse; ++i)
sc->hn_tx_ring[i].hn_oactive = 0;
@@ -4131,7 +4168,7 @@
}
/* Everything is ready; unleash! */
- atomic_set_int(&ifp->if_drv_flags, IFF_DRV_RUNNING);
+ if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
/* Re-enable polling if requested. */
if (sc->hn_pollhz > 0)
@@ -4456,7 +4493,7 @@
HN_LOCK(sc);
if (sc->hn_pollhz != pollhz) {
sc->hn_pollhz = pollhz;
- if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) &&
+ if ((if_getdrvflags(sc->hn_ifp) & IFF_DRV_RUNNING) &&
(sc->hn_flags & HN_FLAG_SYNTH_ATTACHED))
hn_polling(sc, sc->hn_pollhz);
}
@@ -4499,7 +4536,7 @@
uint32_t hwassist;
HN_LOCK(sc);
- hwassist = sc->hn_ifp->if_hwassist;
+ hwassist = if_gethwassist(sc->hn_ifp);
HN_UNLOCK(sc);
snprintf(assist_str, sizeof(assist_str), "%b", hwassist, CSUM_BITS);
return sysctl_handle_string(oidp, assist_str, sizeof(assist_str), req);
@@ -4666,13 +4703,13 @@
{
struct hn_softc *sc = arg1;
char vf_name[IFNAMSIZ + 1];
- struct ifnet *vf_ifp;
+ if_t vf_ifp;
HN_LOCK(sc);
vf_name[0] = '\0';
vf_ifp = sc->hn_vf_ifp;
if (vf_ifp != NULL)
- snprintf(vf_name, sizeof(vf_name), "%s", vf_ifp->if_xname);
+ snprintf(vf_name, sizeof(vf_name), "%s", if_name(vf_ifp));
HN_UNLOCK(sc);
return sysctl_handle_string(oidp, vf_name, sizeof(vf_name), req);
}
@@ -4682,13 +4719,13 @@
{
struct hn_softc *sc = arg1;
char vf_name[IFNAMSIZ + 1];
- struct ifnet *vf_ifp;
+ if_t vf_ifp;
HN_LOCK(sc);
vf_name[0] = '\0';
vf_ifp = sc->hn_rx_ring[0].hn_rxvf_ifp;
if (vf_ifp != NULL)
- snprintf(vf_name, sizeof(vf_name), "%s", vf_ifp->if_xname);
+ snprintf(vf_name, sizeof(vf_name), "%s", if_name(vf_ifp));
HN_UNLOCK(sc);
return sysctl_handle_string(oidp, vf_name, sizeof(vf_name), req);
}
@@ -4714,7 +4751,7 @@
first = true;
for (i = 0; i < hn_vfmap_size; ++i) {
struct epoch_tracker et;
- struct ifnet *ifp;
+ if_t ifp;
if (hn_vfmap[i] == NULL)
continue;
@@ -4723,9 +4760,9 @@
ifp = ifnet_byindex(i);
if (ifp != NULL) {
if (first)
- sbuf_printf(sb, "%s", ifp->if_xname);
+ sbuf_printf(sb, "%s", if_name(ifp));
else
- sbuf_printf(sb, " %s", ifp->if_xname);
+ sbuf_printf(sb, " %s", if_name(ifp));
first = false;
}
NET_EPOCH_EXIT(et);
@@ -4759,7 +4796,7 @@
first = true;
for (i = 0; i < hn_vfmap_size; ++i) {
struct epoch_tracker et;
- struct ifnet *ifp, *hn_ifp;
+ if_t ifp, hn_ifp;
hn_ifp = hn_vfmap[i];
if (hn_ifp == NULL)
@@ -4769,11 +4806,11 @@
ifp = ifnet_byindex(i);
if (ifp != NULL) {
if (first) {
- sbuf_printf(sb, "%s:%s", ifp->if_xname,
- hn_ifp->if_xname);
+ sbuf_printf(sb, "%s:%s", if_name(ifp),
+ if_name(hn_ifp));
} else {
- sbuf_printf(sb, " %s:%s", ifp->if_xname,
- hn_ifp->if_xname);
+ sbuf_printf(sb, " %s:%s", if_name(ifp),
+ if_name(hn_ifp));
}
first = false;
}
@@ -5563,13 +5600,13 @@
static void
hn_set_tso_maxsize(struct hn_softc *sc, int tso_maxlen, int mtu)
{
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
u_int hw_tsomax;
int tso_minlen;
HN_LOCK_ASSERT(sc);
- if ((ifp->if_capabilities & (IFCAP_TSO4 | IFCAP_TSO6)) == 0)
+ if ((if_getcapabilities(ifp) & (IFCAP_TSO4 | IFCAP_TSO6)) == 0)
return;
KASSERT(sc->hn_ndis_tso_sgmin >= 2,
@@ -5589,12 +5626,12 @@
hw_tsomax = tso_maxlen - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN);
if (hn_xpnt_vf_isready(sc)) {
- if (hw_tsomax > sc->hn_vf_ifp->if_hw_tsomax)
- hw_tsomax = sc->hn_vf_ifp->if_hw_tsomax;
+ if (hw_tsomax > if_gethwtsomax(sc->hn_vf_ifp))
+ hw_tsomax = if_gethwtsomax(sc->hn_vf_ifp);
}
- ifp->if_hw_tsomax = hw_tsomax;
+ if_sethwtsomax(ifp, hw_tsomax);
if (bootverbose)
- if_printf(ifp, "TSO size max %u\n", ifp->if_hw_tsomax);
+ if_printf(ifp, "TSO size max %u\n", if_gethwtsomax(ifp));
}
static void
@@ -5689,7 +5726,7 @@
hn_start_locked(struct hn_tx_ring *txr, int len)
{
struct hn_softc *sc = txr->hn_sc;
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
int sched = 0;
KASSERT(hn_use_if_start,
@@ -5701,16 +5738,16 @@
if (__predict_false(txr->hn_suspended))
return (0);
- if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+ if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
IFF_DRV_RUNNING)
return (0);
- while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
+ while (!if_sendq_empty(ifp)) {
struct hn_txdesc *txd;
struct mbuf *m_head;
int error;
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
+ m_head = if_dequeue(ifp);
if (m_head == NULL)
break;
@@ -5720,7 +5757,7 @@
* dispatch this packet sending (and sending of any
* following up packets) to tx taskqueue.
*/
- IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
+ if_sendq_prepend(ifp, m_head);
sched = 1;
break;
}
@@ -5745,8 +5782,8 @@
txd = hn_txdesc_get(txr);
if (txd == NULL) {
txr->hn_no_txdescs++;
- IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
- atomic_set_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_sendq_prepend(ifp, m_head);
+ if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0);
break;
}
@@ -5764,8 +5801,8 @@
("pending mbuf for aggregating txdesc"));
error = hn_flush_txagg(ifp, txr);
if (__predict_false(error)) {
- atomic_set_int(&ifp->if_drv_flags,
- IFF_DRV_OACTIVE);
+ if_setdrvflagbits(ifp,
+ IFF_DRV_OACTIVE, 0);
break;
}
} else {
@@ -5773,9 +5810,9 @@
error = hn_txpkt(ifp, txr, txd);
if (__predict_false(error)) {
/* txd is freed, but m_head is not */
- IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
- atomic_set_int(&ifp->if_drv_flags,
- IFF_DRV_OACTIVE);
+ if_sendq_prepend(ifp, m_head);
+ if_setdrvflagbits(ifp,
+ IFF_DRV_OACTIVE, 0);
break;
}
}
@@ -5797,9 +5834,9 @@
}
static void
-hn_start(struct ifnet *ifp)
+hn_start(if_t ifp)
{
- struct hn_softc *sc = ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(ifp);
struct hn_tx_ring *txr = &sc->hn_tx_ring[0];
if (txr->hn_sched_tx)
@@ -5823,7 +5860,7 @@
struct hn_tx_ring *txr = xtxr;
mtx_lock(&txr->hn_tx_lock);
- atomic_clear_int(&txr->hn_sc->hn_ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_setdrvflagbits(txr->hn_sc->hn_ifp, 0, IFF_DRV_OACTIVE);
hn_start_locked(txr, 0);
mtx_unlock(&txr->hn_tx_lock);
}
@@ -5832,7 +5869,7 @@
hn_start_txeof(struct hn_tx_ring *txr)
{
struct hn_softc *sc = txr->hn_sc;
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
KASSERT(txr == &sc->hn_tx_ring[0], ("not the first TX ring"));
@@ -5842,7 +5879,7 @@
if (mtx_trylock(&txr->hn_tx_lock)) {
int sched;
- atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
sched = hn_start_locked(txr, txr->hn_direct_tx_size);
mtx_unlock(&txr->hn_tx_lock);
if (sched) {
@@ -5857,7 +5894,7 @@
* flag again with the hn_tx_lock to avoid possible
* races.
*/
- atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
+ if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
taskqueue_enqueue(txr->hn_tx_taskq, &txr->hn_txeof_task);
}
}
@@ -5868,7 +5905,7 @@
hn_xmit(struct hn_tx_ring *txr, int len)
{
struct hn_softc *sc = txr->hn_sc;
- struct ifnet *ifp = sc->hn_ifp;
+ if_t ifp = sc->hn_ifp;
struct mbuf *m_head;
int sched = 0;
@@ -5882,7 +5919,7 @@
if (__predict_false(txr->hn_suspended))
return (0);
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 || txr->hn_oactive)
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 || txr->hn_oactive)
return (0);
while ((m_head = drbr_peek(ifp, txr->hn_mbuf_br)) != NULL) {
@@ -5958,9 +5995,9 @@
}
static int
-hn_transmit(struct ifnet *ifp, struct mbuf *m)
+hn_transmit(if_t ifp, struct mbuf *m)
{
- struct hn_softc *sc = ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(ifp);
struct hn_tx_ring *txr;
int error, idx = 0;
@@ -5976,7 +6013,7 @@
omcast = (m->m_flags & M_MCAST) != 0;
if (sc->hn_xvf_flags & HN_XVFFLAG_ACCBPF) {
- if (bpf_peers_present(ifp->if_bpf)) {
+ if (bpf_peers_present(if_getbpf(ifp))) {
m_bpf = m_copypacket(m, M_NOWAIT);
if (m_bpf == NULL) {
/*
@@ -5990,7 +6027,7 @@
ETHER_BPF_MTAP(ifp, m);
}
- error = sc->hn_vf_ifp->if_transmit(sc->hn_vf_ifp, m);
+ error = if_transmit(sc->hn_vf_ifp, m);
rm_runlock(&sc->hn_vf_lock, &pt);
if (m_bpf != NULL) {
@@ -6112,9 +6149,9 @@
}
static void
-hn_xmit_qflush(struct ifnet *ifp)
+hn_xmit_qflush(if_t ifp)
{
- struct hn_softc *sc = ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(ifp);
struct rm_priotracker pt;
int i;
@@ -6124,7 +6161,7 @@
rm_rlock(&sc->hn_vf_lock, &pt);
if (sc->hn_xvf_flags & HN_XVFFLAG_ENABLED)
- sc->hn_vf_ifp->if_qflush(sc->hn_vf_ifp);
+ if_qflush(sc->hn_vf_ifp);
rm_runlock(&sc->hn_vf_lock, &pt);
}
@@ -6876,7 +6913,7 @@
* device is receiving packets, so the data path of the
* synthetic device must be suspended.
*/
- if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) ||
+ if ((if_getdrvflags(sc->hn_ifp) & IFF_DRV_RUNNING) ||
(sc->hn_flags & HN_FLAG_RXVF))
hn_suspend_data(sc);
hn_suspend_mgmt(sc);
@@ -6971,7 +7008,7 @@
* device have to receive packets, so the data path of the
* synthetic device must be resumed.
*/
- if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) ||
+ if ((if_getdrvflags(sc->hn_ifp) & IFF_DRV_RUNNING) ||
(sc->hn_flags & HN_FLAG_RXVF))
hn_resume_data(sc);
@@ -6990,7 +7027,7 @@
* Re-enable polling if this interface is running and
* the polling is requested.
*/
- if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) && sc->hn_pollhz > 0)
+ if ((if_getdrvflags(sc->hn_ifp) & IFF_DRV_RUNNING) && sc->hn_pollhz > 0)
hn_polling(sc, sc->hn_pollhz);
}
@@ -7388,9 +7425,9 @@
}
if (hdr->rm_type == REMOTE_NDIS_INDICATE_STATUS_MSG)
- hn_rndis_rx_status(rxr->hn_ifp->if_softc, data, dlen);
+ hn_rndis_rx_status(if_getsoftc(rxr->hn_ifp), data, dlen);
else
- hn_rndis_rx_ctrl(rxr->hn_ifp->if_softc, data, dlen);
+ hn_rndis_rx_ctrl(if_getsoftc(rxr->hn_ifp), data, dlen);
}
static void
@@ -7532,7 +7569,7 @@
hn_chan_callback(struct vmbus_channel *chan, void *xrxr)
{
struct hn_rx_ring *rxr = xrxr;
- struct hn_softc *sc = rxr->hn_ifp->if_softc;
+ struct hn_softc *sc = if_getsoftc(rxr->hn_ifp);
for (;;) {
struct vmbus_chanpkt_hdr *pkt = rxr->hn_pktbuf;
@@ -7622,7 +7659,7 @@
*/
rm_init_flags(&hn_vfmap_lock, "hn_vfmap", RM_SLEEPABLE);
hn_vfmap_size = HN_VFMAP_SIZE_DEF;
- hn_vfmap = malloc(sizeof(struct ifnet *) * hn_vfmap_size, M_DEVBUF,
+ hn_vfmap = malloc(sizeof(if_t) * hn_vfmap_size, M_DEVBUF,
M_WAITOK | M_ZERO);
/*
diff --git a/sys/dev/hyperv/netvsc/if_hnvar.h b/sys/dev/hyperv/netvsc/if_hnvar.h
--- a/sys/dev/hyperv/netvsc/if_hnvar.h
+++ b/sys/dev/hyperv/netvsc/if_hnvar.h
@@ -71,8 +71,8 @@
};
struct hn_rx_ring {
- struct ifnet *hn_ifp;
- struct ifnet *hn_rxvf_ifp; /* SR-IOV VF for RX */
+ if_t hn_ifp;
+ if_t hn_rxvf_ifp; /* SR-IOV VF for RX */
struct hn_tx_ring *hn_txr;
void *hn_pktbuf;
int hn_pktbuf_len;
@@ -192,7 +192,7 @@
* Device-specific softc structure
*/
struct hn_softc {
- struct ifnet *hn_ifp;
+ if_t hn_ifp;
struct ifmedia hn_media;
device_t hn_dev;
int hn_if_flags;
@@ -204,7 +204,7 @@
struct hn_rx_ring *hn_rx_ring;
struct rmlock hn_vf_lock;
- struct ifnet *hn_vf_ifp; /* SR-IOV VF */
+ if_t hn_vf_ifp; /* SR-IOV VF */
uint32_t hn_xvf_flags; /* transparent VF flags */
int hn_tx_ring_cnt;
@@ -277,7 +277,7 @@
* Saved information for VF under transparent mode.
*/
void (*hn_vf_input)
- (struct ifnet *, struct mbuf *);
+ (if_t, struct mbuf *);
int hn_saved_caps;
u_int hn_saved_tsomax;
u_int hn_saved_tsosegcnt;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 3, 3:53 PM (2 h, 16 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16948155
Default Alt Text
D37855.id120822.diff (51 KB)
Attached To
Mode
D37855: Mechanically convert if_hn(4) to DrvAPI
Attached
Detach File
Event Timeline
Log In to Comment