git: 44e65355a35b - main - Mechanically convert if_cas(4) to IfAPI

From: Justin Hibbits <jhibbits_at_FreeBSD.org>
Date: Tue, 31 Jan 2023 21:53:51 UTC
The branch main has been updated by jhibbits:

URL: https://cgit.FreeBSD.org/src/commit/?id=44e65355a35b99812a9655b31f2f54aed6d79292

commit 44e65355a35b99812a9655b31f2f54aed6d79292
Author:     Justin Hibbits <jhibbits@FreeBSD.org>
AuthorDate: 2022-03-01 15:54:11 +0000
Commit:     Justin Hibbits <jhibbits@FreeBSD.org>
CommitDate: 2023-01-31 21:26:34 +0000

    Mechanically convert if_cas(4) to IfAPI
    
    Sponsored by:   Juniper Networks, Inc.
    Differential Revision: https://reviews.freebsd.org/D37793
---
 sys/dev/cas/if_cas.c    | 177 ++++++++++++++++++++++++------------------------
 sys/dev/cas/if_casvar.h |   2 +-
 2 files changed, 89 insertions(+), 90 deletions(-)

diff --git a/sys/dev/cas/if_cas.c b/sys/dev/cas/if_cas.c
index b6792cbe097e..f106c606ffb1 100644
--- a/sys/dev/cas/if_cas.c
+++ b/sys/dev/cas/if_cas.c
@@ -141,10 +141,10 @@ static void	cas_init_locked(struct cas_softc *sc);
 static void	cas_init_regs(struct cas_softc *sc);
 static int	cas_intr(void *v);
 static void	cas_intr_task(void *arg, int pending __unused);
-static int	cas_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data);
+static int	cas_ioctl(if_t ifp, u_long cmd, caddr_t data);
 static int	cas_load_txmbuf(struct cas_softc *sc, struct mbuf **m_head);
-static int	cas_mediachange(struct ifnet *ifp);
-static void	cas_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr);
+static int	cas_mediachange(if_t ifp);
+static void	cas_mediastatus(if_t ifp, struct ifmediareq *ifmr);
 static void	cas_meminit(struct cas_softc *sc);
 static void	cas_mifinit(struct cas_softc *sc);
 static int	cas_mii_readreg(device_t dev, int phy, int reg);
@@ -163,8 +163,8 @@ static u_int	cas_rxcompsize(u_int sz);
 static void	cas_rxdma_callback(void *xsc, bus_dma_segment_t *segs,
 		    int nsegs, int error);
 static void	cas_setladrf(struct cas_softc *sc);
-static void	cas_start(struct ifnet *ifp);
-static void	cas_stop(struct ifnet *ifp);
+static void	cas_start(if_t ifp);
+static void	cas_stop(if_t ifp);
 static void	cas_suspend(struct cas_softc *sc);
 static void	cas_tick(void *arg);
 static void	cas_tint(struct cas_softc *sc);
@@ -184,7 +184,7 @@ static int
 cas_attach(struct cas_softc *sc)
 {
 	struct cas_txsoft *txs;
-	struct ifnet *ifp;
+	if_t ifp;
 	int error, i;
 	uint32_t v;
 
@@ -192,16 +192,15 @@ cas_attach(struct cas_softc *sc)
 	ifp = sc->sc_ifp = if_alloc(IFT_ETHER);
 	if (ifp == NULL)
 		return (ENOSPC);
-	ifp->if_softc = sc;
+	if_setsoftc(ifp, sc);
 	if_initname(ifp, device_get_name(sc->sc_dev),
 	    device_get_unit(sc->sc_dev));
-	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
-	ifp->if_start = cas_start;
-	ifp->if_ioctl = cas_ioctl;
-	ifp->if_init = cas_init;
-	IFQ_SET_MAXLEN(&ifp->if_snd, CAS_TXQUEUELEN);
-	ifp->if_snd.ifq_drv_maxlen = CAS_TXQUEUELEN;
-	IFQ_SET_READY(&ifp->if_snd);
+	if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
+	if_setstartfn(ifp, cas_start);
+	if_setioctlfn(ifp, cas_ioctl);
+	if_setinitfn(ifp, cas_init);
+	if_setsendqlen(ifp, CAS_TXQUEUELEN);
+	if_setsendqready(ifp);
 
 	callout_init_mtx(&sc->sc_tick_ch, &sc->sc_mtx, 0);
 	callout_init_mtx(&sc->sc_rx_ch, &sc->sc_mtx, 0);
@@ -423,13 +422,13 @@ cas_attach(struct cas_softc *sc)
 	/*
 	 * Tell the upper layer(s) we support long frames/checksum offloads.
 	 */
-	ifp->if_hdrlen = sizeof(struct ether_vlan_header);
-	ifp->if_capabilities = IFCAP_VLAN_MTU;
+	if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
+	if_setcapabilities(ifp, IFCAP_VLAN_MTU);
 	if ((sc->sc_flags & CAS_NO_CSUM) == 0) {
-		ifp->if_capabilities |= IFCAP_HWCSUM;
-		ifp->if_hwassist = CAS_CSUM_FEATURES;
+		if_setcapabilitiesbit(ifp, IFCAP_HWCSUM, 0);
+		if_sethwassist(ifp, CAS_CSUM_FEATURES);
 	}
-	ifp->if_capenable = ifp->if_capabilities;
+	if_setcapenable(ifp, if_getcapabilities(ifp));
 
 	return (0);
 
@@ -475,7 +474,7 @@ cas_attach(struct cas_softc *sc)
 static void
 cas_detach(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	int i;
 
 	ether_ifdetach(ifp);
@@ -521,7 +520,7 @@ cas_detach(struct cas_softc *sc)
 static void
 cas_suspend(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 
 	CAS_LOCK(sc);
 	cas_stop(ifp);
@@ -531,7 +530,7 @@ cas_suspend(struct cas_softc *sc)
 static void
 cas_resume(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 
 	CAS_LOCK(sc);
 	/*
@@ -539,7 +538,7 @@ cas_resume(struct cas_softc *sc)
 	 * after power-on.
 	 */
 	sc->sc_flags &= ~CAS_INITED;
-	if (ifp->if_flags & IFF_UP)
+	if (if_getflags(ifp) & IFF_UP)
 		cas_init_locked(sc);
 	CAS_UNLOCK(sc);
 }
@@ -634,7 +633,7 @@ static void
 cas_tick(void *arg)
 {
 	struct cas_softc *sc = arg;
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	uint32_t v;
 
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
@@ -718,9 +717,9 @@ cas_reset(struct cas_softc *sc)
 }
 
 static void
-cas_stop(struct ifnet *ifp)
+cas_stop(if_t ifp)
 {
-	struct cas_softc *sc = ifp->if_softc;
+	struct cas_softc *sc = if_getsoftc(ifp);
 	struct cas_txsoft *txs;
 
 #ifdef CAS_DEBUG
@@ -756,7 +755,7 @@ cas_stop(struct ifnet *ifp)
 	/*
 	 * Mark the interface down and cancel the watchdog timer.
 	 */
-	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+	if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE));
 	sc->sc_flags &= ~CAS_LINK;
 	sc->sc_wdog_timer = 0;
 }
@@ -967,12 +966,12 @@ cas_init(void *xsc)
 static void
 cas_init_locked(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	uint32_t v;
 
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
 
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+	if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0)
 		return;
 
 #ifdef CAS_DEBUG
@@ -1170,8 +1169,8 @@ cas_init_locked(struct cas_softc *sc)
 	if ((sc->sc_flags & CAS_REG_PLUS) != 0)
 		CAS_WRITE_4(sc, CAS_RX_KICK2, CAS_NRXDESC2 - 4);
 
-	ifp->if_drv_flags |= IFF_DRV_RUNNING;
-	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
+	if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
 
 	mii_mediachg(sc->sc_mii);
 
@@ -1326,7 +1325,7 @@ static void
 cas_init_regs(struct cas_softc *sc)
 {
 	int i;
-	const u_char *laddr = IF_LLADDR(sc->sc_ifp);
+	const u_char *laddr = if_getlladdr(sc->sc_ifp);
 
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
 
@@ -1408,9 +1407,9 @@ cas_init_regs(struct cas_softc *sc)
 static void
 cas_tx_task(void *arg, int pending __unused)
 {
-	struct ifnet *ifp;
+	if_t ifp;
 
-	ifp = (struct ifnet *)arg;
+	ifp = (if_t)arg;
 	cas_start(ifp);
 }
 
@@ -1433,15 +1432,15 @@ cas_txkick(struct cas_softc *sc)
 }
 
 static void
-cas_start(struct ifnet *ifp)
+cas_start(if_t ifp)
 {
-	struct cas_softc *sc = ifp->if_softc;
+	struct cas_softc *sc = if_getsoftc(ifp);
 	struct mbuf *m;
 	int kicked, ntx;
 
 	CAS_LOCK(sc);
 
-	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
 	    IFF_DRV_RUNNING || (sc->sc_flags & CAS_LINK) == 0) {
 		CAS_UNLOCK(sc);
 		return;
@@ -1457,15 +1456,15 @@ cas_start(struct ifnet *ifp)
 #endif
 	ntx = 0;
 	kicked = 0;
-	for (; !IFQ_DRV_IS_EMPTY(&ifp->if_snd) && sc->sc_txfree > 1;) {
-		IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
+	for (; !if_sendq_empty(ifp) && sc->sc_txfree > 1;) {
+		m = if_dequeue(ifp);
 		if (m == NULL)
 			break;
 		if (cas_load_txmbuf(sc, &m) != 0) {
 			if (m == NULL)
 				break;
-			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-			IFQ_DRV_PREPEND(&ifp->if_snd, m);
+			if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0);
+			if_sendq_prepend(ifp, m);
 			break;
 		}
 		if ((sc->sc_txnext % 4) == 0) {
@@ -1500,7 +1499,7 @@ cas_start(struct ifnet *ifp)
 static void
 cas_tint(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	struct cas_txsoft *txs;
 	int progress;
 	uint32_t txlast;
@@ -1520,7 +1519,7 @@ cas_tint(struct cas_softc *sc)
 	CAS_CDSYNC(sc, BUS_DMASYNC_POSTREAD);
 	while ((txs = STAILQ_FIRST(&sc->sc_txdirtyq)) != NULL) {
 #ifdef CAS_DEBUG
-		if ((ifp->if_flags & IFF_DEBUG) != 0) {
+		if ((if_getflags(ifp) & IFF_DEBUG) != 0) {
 			printf("    txsoft %p transmit chain:\n", txs);
 			for (i = txs->txs_firstdesc;; i = CAS_NEXTTX(i)) {
 				printf("descriptor %d: ", i);
@@ -1592,7 +1591,7 @@ cas_tint(struct cas_softc *sc)
 
 	if (progress) {
 		/* We freed some descriptors, so reset IFF_DRV_OACTIVE. */
-		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+		if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
 		if (STAILQ_EMPTY(&sc->sc_txdirtyq))
 			sc->sc_wdog_timer = 0;
 	}
@@ -1620,7 +1619,7 @@ static void
 cas_rint(struct cas_softc *sc)
 {
 	struct cas_rxdsoft *rxds, *rxds2;
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	struct mbuf *m, *m2;
 	uint64_t word1, word2, word3 __unused, word4;
 	uint32_t rxhead;
@@ -1672,7 +1671,7 @@ cas_rint(struct cas_softc *sc)
 		WORDTOH(4);
 
 #ifdef CAS_DEBUG
-		if ((ifp->if_flags & IFF_DEBUG) != 0) {
+		if ((if_getflags(ifp) & IFF_DEBUG) != 0) {
 			printf("    completion %d: ", sc->sc_rxcptr);
 			PRINTWORD(1, '\t');
 			PRINTWORD(2, '\t');
@@ -1744,12 +1743,12 @@ cas_rint(struct cas_softc *sc)
 				m->m_pkthdr.rcvif = ifp;
 				m->m_pkthdr.len = m->m_len = len;
 				if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
-				if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
+				if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0)
 					cas_rxcksum(m, CAS_GET(word4,
 					    CAS_RC4_TCP_CSUM));
 				/* Pass it on. */
 				CAS_UNLOCK(sc);
-				(*ifp->if_input)(ifp, m);
+				if_input(ifp, m);
 				CAS_LOCK(sc);
 			} else
 				if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
@@ -1828,12 +1827,12 @@ cas_rint(struct cas_softc *sc)
 				m->m_pkthdr.rcvif = ifp;
 				m->m_pkthdr.len = len;
 				if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
-				if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
+				if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0)
 					cas_rxcksum(m, CAS_GET(word4,
 					    CAS_RC4_TCP_CSUM));
 				/* Pass it on. */
 				CAS_UNLOCK(sc);
-				(*ifp->if_input)(ifp, m);
+				if_input(ifp, m);
 				CAS_LOCK(sc);
 			} else
 				if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
@@ -1850,7 +1849,7 @@ cas_rint(struct cas_softc *sc)
 
  skip:
 		cas_rxcompinit(&sc->sc_rxcomps[sc->sc_rxcptr]);
-		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+		if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
 			break;
 	}
 	CAS_CDSYNC(sc, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
@@ -1918,7 +1917,7 @@ cas_add_rxdesc(struct cas_softc *sc, u_int idx)
 static void
 cas_eint(struct cas_softc *sc, u_int status)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
 
@@ -1936,9 +1935,9 @@ cas_eint(struct cas_softc *sc, u_int status)
 	}
 	printf("\n");
 
-	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
 	cas_init_locked(sc);
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	if (!if_sendq_empty(ifp))
 		taskqueue_enqueue(sc->sc_tq, &sc->sc_tx_task);
 }
 
@@ -1962,12 +1961,12 @@ static void
 cas_intr_task(void *arg, int pending __unused)
 {
 	struct cas_softc *sc = arg;
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	uint32_t status, status2;
 
 	CAS_LOCK_ASSERT(sc, MA_NOTOWNED);
 
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+	if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
 		return;
 
 	status = CAS_READ_4(sc, CAS_STATUS);
@@ -2054,10 +2053,10 @@ cas_intr_task(void *arg, int pending __unused)
 	    (CAS_INTR_TX_INT_ME | CAS_INTR_TX_ALL | CAS_INTR_TX_DONE)) != 0)
 		cas_tint(sc);
 
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+	if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
 		CAS_UNLOCK(sc);
 		return;
-	} else if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	} else if (!if_sendq_empty(ifp))
 		taskqueue_enqueue(sc->sc_tq, &sc->sc_tx_task);
 	CAS_UNLOCK(sc);
 
@@ -2084,7 +2083,7 @@ cas_intr_task(void *arg, int pending __unused)
 static void
 cas_watchdog(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
 
@@ -2111,9 +2110,9 @@ cas_watchdog(struct cas_softc *sc)
 	if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
 
 	/* Try to get more packets going. */
-	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
 	cas_init_locked(sc);
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	if (!if_sendq_empty(ifp))
 		taskqueue_enqueue(sc->sc_tq, &sc->sc_tx_task);
 }
 
@@ -2283,7 +2282,7 @@ static void
 cas_mii_statchg(device_t dev)
 {
 	struct cas_softc *sc;
-	struct ifnet *ifp;
+	if_t ifp;
 	int gigabit;
 	uint32_t rxcfg, txcfg, v;
 
@@ -2293,7 +2292,7 @@ cas_mii_statchg(device_t dev)
 	CAS_LOCK_ASSERT(sc, MA_OWNED);
 
 #ifdef CAS_DEBUG
-	if ((ifp->if_flags & IFF_DEBUG) != 0)
+	if ((if_getflags(ifp) & IFF_DEBUG) != 0)
 		device_printf(sc->sc_dev, "%s: status changen", __func__);
 #endif
 
@@ -2355,11 +2354,11 @@ cas_mii_statchg(device_t dev)
 	 * hardware checksumming in half-duplex mode though.
 	 */
 	if ((IFM_OPTIONS(sc->sc_mii->mii_media_active) & IFM_FDX) == 0) {
-		ifp->if_capenable &= ~IFCAP_HWCSUM;
-		ifp->if_hwassist = 0;
+		if_setcapenablebit(ifp, 0, IFCAP_HWCSUM);
+		if_sethwassist(ifp, 0);
 	} else if ((sc->sc_flags & CAS_NO_CSUM) == 0) {
-		ifp->if_capenable = ifp->if_capabilities;
-		ifp->if_hwassist = CAS_CSUM_FEATURES;
+		if_setcapenable(ifp, if_getcapabilities(ifp));
+		if_sethwassist(ifp, CAS_CSUM_FEATURES);
 	}
 
 	if (sc->sc_variant == CAS_SATURN) {
@@ -2392,7 +2391,7 @@ cas_mii_statchg(device_t dev)
 	CAS_WRITE_4(sc, CAS_MAC_XIF_CONF, v);
 
 	sc->sc_mac_rxcfg = rxcfg;
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
+	if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0 &&
 	    (sc->sc_flags & CAS_LINK) != 0) {
 		CAS_WRITE_4(sc, CAS_MAC_TX_CONF,
 		    txcfg | CAS_MAC_TX_CONF_EN);
@@ -2402,9 +2401,9 @@ cas_mii_statchg(device_t dev)
 }
 
 static int
-cas_mediachange(struct ifnet *ifp)
+cas_mediachange(if_t ifp)
 {
-	struct cas_softc *sc = ifp->if_softc;
+	struct cas_softc *sc = if_getsoftc(ifp);
 	int error;
 
 	/* XXX add support for serial media. */
@@ -2416,12 +2415,12 @@ cas_mediachange(struct ifnet *ifp)
 }
 
 static void
-cas_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
+cas_mediastatus(if_t ifp, struct ifmediareq *ifmr)
 {
-	struct cas_softc *sc = ifp->if_softc;
+	struct cas_softc *sc = if_getsoftc(ifp);
 
 	CAS_LOCK(sc);
-	if ((ifp->if_flags & IFF_UP) == 0) {
+	if ((if_getflags(ifp) & IFF_UP) == 0) {
 		CAS_UNLOCK(sc);
 		return;
 	}
@@ -2433,9 +2432,9 @@ cas_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
 }
 
 static int
-cas_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+cas_ioctl(if_t ifp, u_long cmd, caddr_t data)
 {
-	struct cas_softc *sc = ifp->if_softc;
+	struct cas_softc *sc = if_getsoftc(ifp);
 	struct ifreq *ifr = (struct ifreq *)data;
 	int error;
 
@@ -2443,16 +2442,16 @@ cas_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 	switch (cmd) {
 	case SIOCSIFFLAGS:
 		CAS_LOCK(sc);
-		if ((ifp->if_flags & IFF_UP) != 0) {
-			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
-			    ((ifp->if_flags ^ sc->sc_ifflags) &
+		if ((if_getflags(ifp) & IFF_UP) != 0) {
+			if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0 &&
+			    ((if_getflags(ifp) ^ sc->sc_ifflags) &
 			    (IFF_ALLMULTI | IFF_PROMISC)) != 0)
 				cas_setladrf(sc);
 			else
 				cas_init_locked(sc);
-		} else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		} else if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0)
 			cas_stop(ifp);
-		sc->sc_ifflags = ifp->if_flags;
+		sc->sc_ifflags = if_getflags(ifp);
 		CAS_UNLOCK(sc);
 		break;
 	case SIOCSIFCAP:
@@ -2462,17 +2461,17 @@ cas_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 			CAS_UNLOCK(sc);
 			break;
 		}
-		ifp->if_capenable = ifr->ifr_reqcap;
-		if ((ifp->if_capenable & IFCAP_TXCSUM) != 0)
-			ifp->if_hwassist = CAS_CSUM_FEATURES;
+		if_setcapenable(ifp, ifr->ifr_reqcap);
+		if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0)
+			if_sethwassist(ifp, CAS_CSUM_FEATURES);
 		else
-			ifp->if_hwassist = 0;
+			if_sethwassist(ifp, 0);
 		CAS_UNLOCK(sc);
 		break;
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
 		CAS_LOCK(sc);
-		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0)
 			cas_setladrf(sc);
 		CAS_UNLOCK(sc);
 		break;
@@ -2481,7 +2480,7 @@ cas_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		    (ifr->ifr_mtu > ETHERMTU_JUMBO))
 			error = EINVAL;
 		else
-			ifp->if_mtu = ifr->ifr_mtu;
+			if_setmtu(ifp, ifr->ifr_mtu);
 		break;
 	case SIOCGIFMEDIA:
 	case SIOCSIFMEDIA:
@@ -2512,7 +2511,7 @@ cas_hash_maddr(void *arg, struct sockaddr_dl *sdl, u_int cnt)
 static void
 cas_setladrf(struct cas_softc *sc)
 {
-	struct ifnet *ifp = sc->sc_ifp;
+	if_t ifp = sc->sc_ifp;
 	int i;
 	uint32_t hash[16];
 	uint32_t v;
@@ -2534,11 +2533,11 @@ cas_setladrf(struct cas_softc *sc)
 		    "cannot disable RX MAC or hash filter\n");
 
 	v &= ~(CAS_MAC_RX_CONF_PROMISC | CAS_MAC_RX_CONF_PGRP);
-	if ((ifp->if_flags & IFF_PROMISC) != 0) {
+	if ((if_getflags(ifp) & IFF_PROMISC) != 0) {
 		v |= CAS_MAC_RX_CONF_PROMISC;
 		goto chipit;
 	}
-	if ((ifp->if_flags & IFF_ALLMULTI) != 0) {
+	if ((if_getflags(ifp) & IFF_ALLMULTI) != 0) {
 		v |= CAS_MAC_RX_CONF_PGRP;
 		goto chipit;
 	}
diff --git a/sys/dev/cas/if_casvar.h b/sys/dev/cas/if_casvar.h
index 98a7bed3336d..54ce7b6357f4 100644
--- a/sys/dev/cas/if_casvar.h
+++ b/sys/dev/cas/if_casvar.h
@@ -128,7 +128,7 @@ struct cas_rxdsoft {
  * software state per device
  */
 struct cas_softc {
-	struct ifnet	*sc_ifp;
+	if_t		sc_ifp;
 	struct mtx	sc_mtx;
 	device_t	sc_miibus;
 	struct mii_data	*sc_mii;	/* MII media control */