aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Hibbits <jhibbits@FreeBSD.org>2022-03-01 17:02:48 +0000
committerJustin Hibbits <jhibbits@FreeBSD.org>2023-01-24 19:36:28 +0000
commit4ee967921a516ea3736e31a5500c51aee440eaa5 (patch)
treef7882aa6e5868d25019bbea8a93be69cc7f6499d
parentc2a4666cd3199e38e6c3afa60e2e983d810e4542 (diff)
downloadsrc-4ee967921a516ea3736e31a5500c51aee440eaa5.tar.gz
src-4ee967921a516ea3736e31a5500c51aee440eaa5.zip
Mechanically convert if_vtnet(4) to IfAPI
Reviewed By: bryanv Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D37799
-rw-r--r--sys/dev/virtio/network/if_vtnet.c334
-rw-r--r--sys/dev/virtio/network/if_vtnetvar.h2
2 files changed, 167 insertions, 169 deletions
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
index 264b185ba030..505a62b01b4e 100644
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -118,8 +118,8 @@ static int vtnet_ioctl_mtu(struct vtnet_softc *, u_int);
static int vtnet_ioctl_ifflags(struct vtnet_softc *);
static int vtnet_ioctl_multi(struct vtnet_softc *);
static int vtnet_ioctl_ifcap(struct vtnet_softc *, struct ifreq *);
-static int vtnet_ioctl(struct ifnet *, u_long, caddr_t);
-static uint64_t vtnet_get_counter(struct ifnet *, ift_counter);
+static int vtnet_ioctl(if_t, u_long, caddr_t);
+static uint64_t vtnet_get_counter(if_t, ift_counter);
static int vtnet_rxq_populate(struct vtnet_rxq *);
static void vtnet_rxq_free_mbufs(struct vtnet_rxq *);
@@ -161,11 +161,11 @@ static int vtnet_txq_enqueue_buf(struct vtnet_txq *, struct mbuf **,
struct vtnet_tx_header *);
static int vtnet_txq_encap(struct vtnet_txq *, struct mbuf **, int);
#ifdef VTNET_LEGACY_TX
-static void vtnet_start_locked(struct vtnet_txq *, struct ifnet *);
-static void vtnet_start(struct ifnet *);
+static void vtnet_start_locked(struct vtnet_txq *, if_t);
+static void vtnet_start(if_t);
#else
static int vtnet_txq_mq_start_locked(struct vtnet_txq *, struct mbuf *);
-static int vtnet_txq_mq_start(struct ifnet *, struct mbuf *);
+static int vtnet_txq_mq_start(if_t, struct mbuf *);
static void vtnet_txq_tq_deferred(void *, int);
#endif
static void vtnet_txq_start(struct vtnet_txq *);
@@ -175,7 +175,7 @@ static void vtnet_tx_vq_intr(void *);
static void vtnet_tx_start_all(struct vtnet_softc *);
#ifndef VTNET_LEGACY_TX
-static void vtnet_qflush(struct ifnet *);
+static void vtnet_qflush(if_t);
#endif
static int vtnet_watchdog(struct vtnet_txq *);
@@ -215,14 +215,14 @@ static void vtnet_rx_filter_mac(struct vtnet_softc *);
static int vtnet_exec_vlan_filter(struct vtnet_softc *, int, uint16_t);
static void vtnet_rx_filter_vlan(struct vtnet_softc *);
static void vtnet_update_vlan_filter(struct vtnet_softc *, int, uint16_t);
-static void vtnet_register_vlan(void *, struct ifnet *, uint16_t);
-static void vtnet_unregister_vlan(void *, struct ifnet *, uint16_t);
+static void vtnet_register_vlan(void *, if_t, uint16_t);
+static void vtnet_unregister_vlan(void *, if_t, uint16_t);
static void vtnet_update_speed_duplex(struct vtnet_softc *);
static int vtnet_is_link_up(struct vtnet_softc *);
static void vtnet_update_link_status(struct vtnet_softc *);
-static int vtnet_ifmedia_upd(struct ifnet *);
-static void vtnet_ifmedia_sts(struct ifnet *, struct ifmediareq *);
+static int vtnet_ifmedia_upd(if_t);
+static void vtnet_ifmedia_sts(if_t, struct ifmediareq *);
static void vtnet_get_macaddr(struct vtnet_softc *);
static void vtnet_set_macaddr(struct vtnet_softc *);
static void vtnet_attached_set_macaddr(struct vtnet_softc *);
@@ -495,7 +495,7 @@ static int
vtnet_detach(device_t dev)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
sc = device_get_softc(dev);
ifp = sc->vtnet_ifp;
@@ -568,13 +568,13 @@ static int
vtnet_resume(device_t dev)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
sc = device_get_softc(dev);
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK(sc);
- if (ifp->if_flags & IFF_UP)
+ if (if_getflags(ifp) & IFF_UP)
vtnet_init_locked(sc, 0);
sc->vtnet_flags &= ~VTNET_FLAG_SUSPENDED;
VTNET_CORE_UNLOCK(sc);
@@ -1078,7 +1078,7 @@ static int
vtnet_alloc_interface(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
dev = sc->vtnet_dev;
@@ -1087,7 +1087,7 @@ vtnet_alloc_interface(struct vtnet_softc *sc)
return (ENOMEM);
sc->vtnet_ifp = ifp;
- ifp->if_softc = sc;
+ if_setsoftc(ifp, sc);
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
return (0);
@@ -1098,32 +1098,31 @@ vtnet_setup_interface(struct vtnet_softc *sc)
{
device_t dev;
struct pfil_head_args pa;
- struct ifnet *ifp;
+ if_t ifp;
dev = sc->vtnet_dev;
ifp = sc->vtnet_ifp;
- ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST |
- IFF_KNOWSEPOCH;
- ifp->if_baudrate = IF_Gbps(10);
- ifp->if_init = vtnet_init;
- ifp->if_ioctl = vtnet_ioctl;
- ifp->if_get_counter = vtnet_get_counter;
+ if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST |
+ IFF_KNOWSEPOCH);
+ if_setbaudrate(ifp, IF_Gbps(10));
+ if_setinitfn(ifp, vtnet_init);
+ if_setioctlfn(ifp, vtnet_ioctl);
+ if_setgetcounterfn(ifp, vtnet_get_counter);
#ifndef VTNET_LEGACY_TX
- ifp->if_transmit = vtnet_txq_mq_start;
- ifp->if_qflush = vtnet_qflush;
+ if_settransmitfn(ifp, vtnet_txq_mq_start);
+ if_setqflushfn(ifp, vtnet_qflush);
#else
struct virtqueue *vq = sc->vtnet_txqs[0].vtntx_vq;
- ifp->if_start = vtnet_start;
- IFQ_SET_MAXLEN(&ifp->if_snd, virtqueue_size(vq) - 1);
- ifp->if_snd.ifq_drv_maxlen = virtqueue_size(vq) - 1;
- IFQ_SET_READY(&ifp->if_snd);
+ if_setstartfn(ifp, vtnet_start);
+ if_setsendqlen(ifp, virtqueue_size(vq) - 1);
+ if_setsendqready(ifp);
#endif
vtnet_get_macaddr(sc);
if (virtio_with_feature(dev, VIRTIO_NET_F_STATUS))
- ifp->if_capabilities |= IFCAP_LINKSTATE;
+ if_setcapabilitiesbit(ifp, IFCAP_LINKSTATE, 0);
ifmedia_init(&sc->vtnet_media, 0, vtnet_ifmedia_upd, vtnet_ifmedia_sts);
ifmedia_add(&sc->vtnet_media, IFM_ETHER | IFM_AUTO, 0, NULL);
@@ -1132,35 +1131,35 @@ vtnet_setup_interface(struct vtnet_softc *sc)
if (virtio_with_feature(dev, VIRTIO_NET_F_CSUM)) {
int gso;
- ifp->if_capabilities |= IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6;
+ if_setcapabilitiesbit(ifp, IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6, 0);
gso = virtio_with_feature(dev, VIRTIO_NET_F_GSO);
if (gso || virtio_with_feature(dev, VIRTIO_NET_F_HOST_TSO4))
- ifp->if_capabilities |= IFCAP_TSO4;
+ if_setcapabilitiesbit(ifp, IFCAP_TSO4, 0);
if (gso || virtio_with_feature(dev, VIRTIO_NET_F_HOST_TSO6))
- ifp->if_capabilities |= IFCAP_TSO6;
+ if_setcapabilitiesbit(ifp, IFCAP_TSO6, 0);
if (gso || virtio_with_feature(dev, VIRTIO_NET_F_HOST_ECN))
sc->vtnet_flags |= VTNET_FLAG_TSO_ECN;
- if (ifp->if_capabilities & (IFCAP_TSO4 | IFCAP_TSO6)) {
+ if (if_getcapabilities(ifp) & (IFCAP_TSO4 | IFCAP_TSO6)) {
int tso_maxlen;
- ifp->if_capabilities |= IFCAP_VLAN_HWTSO;
+ if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTSO, 0);
tso_maxlen = vtnet_tunable_int(sc, "tso_maxlen",
vtnet_tso_maxlen);
- ifp->if_hw_tsomax = tso_maxlen -
- (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN);
- ifp->if_hw_tsomaxsegcount = sc->vtnet_tx_nsegs - 1;
- ifp->if_hw_tsomaxsegsize = PAGE_SIZE;
+ if_sethwtsomax(ifp, tso_maxlen -
+ (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN));
+ if_sethwtsomaxsegcount(ifp, sc->vtnet_tx_nsegs - 1);
+ if_sethwtsomaxsegsize(ifp, PAGE_SIZE);
}
}
if (virtio_with_feature(dev, VIRTIO_NET_F_GUEST_CSUM)) {
- ifp->if_capabilities |= IFCAP_RXCSUM;
+ if_setcapabilitiesbit(ifp, IFCAP_RXCSUM, 0);
#ifdef notyet
/* BMV: Rx checksums not distinguished between IPv4 and IPv6. */
- ifp->if_capabilities |= IFCAP_RXCSUM_IPV6;
+ if_setcapabilitiesbit(ifp, IFCAP_RXCSUM_IPV6, 0);
#endif
if (vtnet_tunable_int(sc, "fixup_needs_csum",
@@ -1168,31 +1167,30 @@ vtnet_setup_interface(struct vtnet_softc *sc)
sc->vtnet_flags |= VTNET_FLAG_FIXUP_NEEDS_CSUM;
/* Support either "hardware" or software LRO. */
- ifp->if_capabilities |= IFCAP_LRO;
+ if_setcapabilitiesbit(ifp, IFCAP_LRO, 0);
}
- if (ifp->if_capabilities & (IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6)) {
+ if (if_getcapabilities(ifp) & (IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6)) {
/*
* VirtIO does not support VLAN tagging, but we can fake
* it by inserting and removing the 802.1Q header during
* transmit and receive. We are then able to do checksum
* offloading of VLAN frames.
*/
- ifp->if_capabilities |=
- IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM;
+ if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM, 0);
}
if (sc->vtnet_max_mtu >= ETHERMTU_JUMBO)
- ifp->if_capabilities |= IFCAP_JUMBO_MTU;
- ifp->if_capabilities |= IFCAP_VLAN_MTU;
+ if_setcapabilitiesbit(ifp, IFCAP_JUMBO_MTU, 0);
+ if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU, 0);
/*
* Capabilities after here are not enabled by default.
*/
- ifp->if_capenable = ifp->if_capabilities;
+ if_setcapenable(ifp, if_getcapabilities(ifp));
if (sc->vtnet_flags & VTNET_FLAG_VLAN_FILTER) {
- ifp->if_capabilities |= IFCAP_VLAN_HWFILTER;
+ if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWFILTER, 0);
sc->vtnet_vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
vtnet_register_vlan, sc, EVENTHANDLER_PRI_FIRST);
@@ -1203,14 +1201,14 @@ vtnet_setup_interface(struct vtnet_softc *sc)
ether_ifattach(ifp, sc->vtnet_hwaddr);
/* Tell the upper layer(s) we support long frames. */
- ifp->if_hdrlen = sizeof(struct ether_vlan_header);
+ if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
DEBUGNET_SET(ifp, vtnet);
pa.pa_version = PFIL_VERSION;
pa.pa_flags = PFIL_IN;
pa.pa_type = PFIL_TYPE_ETHERNET;
- pa.pa_headname = ifp->if_xname;
+ pa.pa_headname = if_name(ifp);
sc->vtnet_pfil = pfil_head_register(&pa);
return (0);
@@ -1252,23 +1250,23 @@ vtnet_rx_cluster_size(struct vtnet_softc *sc, int mtu)
static int
vtnet_ioctl_mtu(struct vtnet_softc *sc, u_int mtu)
{
- struct ifnet *ifp;
+ if_t ifp;
int clustersz;
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK_ASSERT(sc);
- if (ifp->if_mtu == mtu)
+ if (if_getmtu(ifp) == mtu)
return (0);
else if (mtu < ETHERMIN || mtu > sc->vtnet_max_mtu)
return (EINVAL);
- ifp->if_mtu = mtu;
+ if_setmtu(ifp, mtu);
clustersz = vtnet_rx_cluster_size(sc, mtu);
if (clustersz != sc->vtnet_rx_clustersz &&
- ifp->if_drv_flags & IFF_DRV_RUNNING) {
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vtnet_init_locked(sc, 0);
}
@@ -1278,15 +1276,15 @@ vtnet_ioctl_mtu(struct vtnet_softc *sc, u_int mtu)
static int
vtnet_ioctl_ifflags(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
int drv_running;
ifp = sc->vtnet_ifp;
- drv_running = (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
+ drv_running = (if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0;
VTNET_CORE_LOCK_ASSERT(sc);
- if ((ifp->if_flags & IFF_UP) == 0) {
+ if ((if_getflags(ifp) & IFF_UP) == 0) {
if (drv_running)
vtnet_stop(sc);
goto out;
@@ -1297,33 +1295,33 @@ vtnet_ioctl_ifflags(struct vtnet_softc *sc)
goto out;
}
- if ((ifp->if_flags ^ sc->vtnet_if_flags) &
+ if ((if_getflags(ifp) ^ sc->vtnet_if_flags) &
(IFF_PROMISC | IFF_ALLMULTI)) {
if (sc->vtnet_flags & VTNET_FLAG_CTRL_RX)
vtnet_rx_filter(sc);
else {
- if ((ifp->if_flags ^ sc->vtnet_if_flags) & IFF_ALLMULTI)
+ if ((if_getflags(ifp) ^ sc->vtnet_if_flags) & IFF_ALLMULTI)
return (ENOTSUP);
- ifp->if_flags |= IFF_PROMISC;
+ if_setflagbits(ifp, IFF_PROMISC, 0);
}
}
out:
- sc->vtnet_if_flags = ifp->if_flags;
+ sc->vtnet_if_flags = if_getflags(ifp);
return (0);
}
static int
vtnet_ioctl_multi(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK_ASSERT(sc);
if (sc->vtnet_flags & VTNET_FLAG_CTRL_RX &&
- ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if_getdrvflags(ifp) & IFF_DRV_RUNNING)
vtnet_rx_filter_mac(sc);
return (0);
@@ -1332,23 +1330,23 @@ vtnet_ioctl_multi(struct vtnet_softc *sc)
static int
vtnet_ioctl_ifcap(struct vtnet_softc *sc, struct ifreq *ifr)
{
- struct ifnet *ifp;
+ if_t ifp;
int mask, reinit, update;
ifp = sc->vtnet_ifp;
- mask = (ifr->ifr_reqcap & ifp->if_capabilities) ^ ifp->if_capenable;
+ mask = (ifr->ifr_reqcap & if_getcapabilities(ifp)) ^ if_getcapenable(ifp);
reinit = update = 0;
VTNET_CORE_LOCK_ASSERT(sc);
if (mask & IFCAP_TXCSUM)
- ifp->if_capenable ^= IFCAP_TXCSUM;
+ if_togglecapenable(ifp, IFCAP_TXCSUM);
if (mask & IFCAP_TXCSUM_IPV6)
- ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
+ if_togglecapenable(ifp, IFCAP_TXCSUM_IPV6);
if (mask & IFCAP_TSO4)
- ifp->if_capenable ^= IFCAP_TSO4;
+ if_togglecapenable(ifp, IFCAP_TSO4);
if (mask & IFCAP_TSO6)
- ifp->if_capenable ^= IFCAP_TSO6;
+ if_togglecapenable(ifp, IFCAP_TSO6);
if (mask & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6 | IFCAP_LRO)) {
/*
@@ -1366,25 +1364,25 @@ vtnet_ioctl_ifcap(struct vtnet_softc *sc, struct ifreq *ifr)
reinit = update = 0;
if (mask & IFCAP_RXCSUM)
- ifp->if_capenable ^= IFCAP_RXCSUM;
+ if_togglecapenable(ifp, IFCAP_RXCSUM);
if (mask & IFCAP_RXCSUM_IPV6)
- ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
+ if_togglecapenable(ifp, IFCAP_RXCSUM_IPV6);
if (mask & IFCAP_LRO)
- ifp->if_capenable ^= IFCAP_LRO;
+ if_togglecapenable(ifp, IFCAP_LRO);
/*
* VirtIO does not distinguish between IPv4 and IPv6 checksums
* so treat them as a pair. Guest TSO (LRO) requires receive
* checksums.
*/
- if (ifp->if_capenable & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) {
- ifp->if_capenable |= IFCAP_RXCSUM;
+ if (if_getcapenable(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) {
+ if_setcapenablebit(ifp, IFCAP_RXCSUM, 0);
#ifdef notyet
- ifp->if_capenable |= IFCAP_RXCSUM_IPV6;
+ if_setcapenablebit(ifp, IFCAP_RXCSUM_IPV6, 0);
#endif
} else
- ifp->if_capenable &=
- ~(IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6 | IFCAP_LRO);
+ if_setcapenablebit(ifp, 0,
+ (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6 | IFCAP_LRO));
}
if (mask & IFCAP_VLAN_HWFILTER) {
@@ -1392,17 +1390,17 @@ vtnet_ioctl_ifcap(struct vtnet_softc *sc, struct ifreq *ifr)
reinit = 1;
if (mask & IFCAP_VLAN_HWFILTER)
- ifp->if_capenable ^= IFCAP_VLAN_HWFILTER;
+ if_togglecapenable(ifp, IFCAP_VLAN_HWFILTER);
}
if (mask & IFCAP_VLAN_HWTSO)
- ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
+ if_togglecapenable(ifp, IFCAP_VLAN_HWTSO);
if (mask & IFCAP_VLAN_HWTAGGING)
- ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
+ if_togglecapenable(ifp, IFCAP_VLAN_HWTAGGING);
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
if (reinit) {
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vtnet_init_locked(sc, 0);
} else if (update)
vtnet_update_rx_offloads(sc);
@@ -1412,13 +1410,13 @@ vtnet_ioctl_ifcap(struct vtnet_softc *sc, struct ifreq *ifr)
}
static int
-vtnet_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+vtnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
{
struct vtnet_softc *sc;
struct ifreq *ifr;
int error;
- sc = ifp->if_softc;
+ sc = if_getsoftc(ifp);
ifr = (struct ifreq *) data;
error = 0;
@@ -1997,12 +1995,12 @@ vtnet_rxq_input(struct vtnet_rxq *rxq, struct mbuf *m,
struct virtio_net_hdr *hdr)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
sc = rxq->vtnrx_sc;
ifp = sc->vtnet_ifp;
- if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
+ if (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) {
struct ether_header *eh = mtod(m, struct ether_header *);
if (eh->ether_type == htons(ETHERTYPE_VLAN)) {
vtnet_vlan_tag_remove(m);
@@ -2041,13 +2039,13 @@ vtnet_rxq_input(struct vtnet_rxq *rxq, struct mbuf *m,
rxq->vtnrx_stats.vrxs_ibytes += m->m_pkthdr.len;
#if defined(INET) || defined(INET6)
- if (vtnet_software_lro(sc) && ifp->if_capenable & IFCAP_LRO) {
+ if (vtnet_software_lro(sc) && if_getcapenable(ifp) & IFCAP_LRO) {
if (vtnet_lro_rx(rxq, m) == 0)
return;
}
#endif
- (*ifp->if_input)(ifp, m);
+ if_input(ifp, m);
}
static int
@@ -2055,7 +2053,7 @@ vtnet_rxq_eof(struct vtnet_rxq *rxq)
{
struct virtio_net_hdr lhdr, *hdr;
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
struct virtqueue *vq;
int deq, count;
@@ -2172,7 +2170,7 @@ static void
vtnet_rx_vq_process(struct vtnet_rxq *rxq, int tries)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
u_int more;
#ifdef DEV_NETMAP
int nmirq;
@@ -2214,7 +2212,7 @@ vtnet_rx_vq_process(struct vtnet_rxq *rxq, int tries)
#endif /* DEV_NETMAP */
again:
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
VTNET_RXQ_UNLOCK(rxq);
return;
}
@@ -2610,7 +2608,7 @@ fail:
#ifdef VTNET_LEGACY_TX
static void
-vtnet_start_locked(struct vtnet_txq *txq, struct ifnet *ifp)
+vtnet_start_locked(struct vtnet_txq *txq, if_t ifp)
{
struct vtnet_softc *sc;
struct virtqueue *vq;
@@ -2623,7 +2621,7 @@ vtnet_start_locked(struct vtnet_txq *txq, struct ifnet *ifp)
VTNET_TXQ_LOCK_ASSERT(txq);
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 ||
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 ||
sc->vtnet_link_active == 0)
return;
@@ -2632,17 +2630,17 @@ vtnet_start_locked(struct vtnet_txq *txq, struct ifnet *ifp)
again:
enq = 0;
- while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
+ while (!if_sendq_empty(ifp)) {
if (virtqueue_full(vq))
break;
- IFQ_DRV_DEQUEUE(&ifp->if_snd, m0);
+ m0 = if_dequeue(ifp);
if (m0 == NULL)
break;
if (vtnet_txq_encap(txq, &m0, M_NOWAIT) != 0) {
if (m0 != NULL)
- IFQ_DRV_PREPEND(&ifp->if_snd, m0);
+ if_sendq_prepend(ifp, m0);
break;
}
@@ -2660,12 +2658,12 @@ again:
}
static void
-vtnet_start(struct ifnet *ifp)
+vtnet_start(if_t ifp)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
- sc = ifp->if_softc;
+ sc = if_getsoftc(ifp);
txq = &sc->vtnet_txqs[0];
VTNET_TXQ_LOCK(txq);
@@ -2681,7 +2679,7 @@ vtnet_txq_mq_start_locked(struct vtnet_txq *txq, struct mbuf *m)
struct vtnet_softc *sc;
struct virtqueue *vq;
struct buf_ring *br;
- struct ifnet *ifp;
+ if_t ifp;
int enq, tries, error;
sc = txq->vtntx_sc;
@@ -2693,7 +2691,7 @@ vtnet_txq_mq_start_locked(struct vtnet_txq *txq, struct mbuf *m)
VTNET_TXQ_LOCK_ASSERT(txq);
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0 ||
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 ||
sc->vtnet_link_active == 0) {
if (m != NULL)
error = drbr_enqueue(ifp, br, m);
@@ -2742,13 +2740,13 @@ again:
}
static int
-vtnet_txq_mq_start(struct ifnet *ifp, struct mbuf *m)
+vtnet_txq_mq_start(if_t ifp, struct mbuf *m)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
int i, npairs, error;
- sc = ifp->if_softc;
+ sc = if_getsoftc(ifp);
npairs = sc->vtnet_act_vq_pairs;
if (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE)
@@ -2790,13 +2788,13 @@ static void
vtnet_txq_start(struct vtnet_txq *txq)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
sc = txq->vtntx_sc;
ifp = sc->vtnet_ifp;
#ifdef VTNET_LEGACY_TX
- if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+ if (!if_sendq_empty(ifp))
vtnet_start_locked(txq, ifp);
#else
if (!drbr_empty(ifp, txq->vtntx_br))
@@ -2809,7 +2807,7 @@ vtnet_txq_tq_intr(void *xtxq, int pending __unused)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
- struct ifnet *ifp;
+ if_t ifp;
txq = xtxq;
sc = txq->vtntx_sc;
@@ -2817,7 +2815,7 @@ vtnet_txq_tq_intr(void *xtxq, int pending __unused)
VTNET_TXQ_LOCK(txq);
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
VTNET_TXQ_UNLOCK(txq);
return;
}
@@ -2864,7 +2862,7 @@ vtnet_tx_vq_intr(void *xtxq)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
- struct ifnet *ifp;
+ if_t ifp;
txq = xtxq;
sc = txq->vtntx_sc;
@@ -2888,7 +2886,7 @@ vtnet_tx_vq_intr(void *xtxq)
VTNET_TXQ_LOCK(txq);
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+ if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) {
VTNET_TXQ_UNLOCK(txq);
return;
}
@@ -2918,14 +2916,14 @@ vtnet_tx_start_all(struct vtnet_softc *sc)
#ifndef VTNET_LEGACY_TX
static void
-vtnet_qflush(struct ifnet *ifp)
+vtnet_qflush(if_t ifp)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
struct mbuf *m;
int i;
- sc = ifp->if_softc;
+ sc = if_getsoftc(ifp);
for (i = 0; i < sc->vtnet_act_vq_pairs; i++) {
txq = &sc->vtnet_txqs[i];
@@ -2943,7 +2941,7 @@ vtnet_qflush(struct ifnet *ifp)
static int
vtnet_watchdog(struct vtnet_txq *txq)
{
- struct ifnet *ifp;
+ if_t ifp;
ifp = txq->vtntx_sc->vtnet_ifp;
@@ -3034,7 +3032,7 @@ static void
vtnet_tick(void *xsc)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
int i, timedout;
sc = xsc;
@@ -3047,7 +3045,7 @@ vtnet_tick(void *xsc)
timedout |= vtnet_watchdog(&sc->vtnet_txqs[i]);
if (timedout != 0) {
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vtnet_init_locked(sc, 0);
} else
callout_schedule(&sc->vtnet_tick_ch, hz);
@@ -3181,14 +3179,14 @@ static void
vtnet_stop(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
dev = sc->vtnet_dev;
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK_ASSERT(sc);
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
sc->vtnet_link_active = 0;
callout_stop(&sc->vtnet_tick_ch);
@@ -3216,7 +3214,7 @@ static int
vtnet_virtio_reinit(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
uint64_t features;
int error;
@@ -3230,13 +3228,13 @@ vtnet_virtio_reinit(struct vtnet_softc *sc)
* via if_capenable and if_hwassist.
*/
- if ((ifp->if_capenable & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) == 0)
+ if ((if_getcapenable(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) == 0)
features &= ~(VIRTIO_NET_F_GUEST_CSUM | VTNET_LRO_FEATURES);
- if ((ifp->if_capenable & IFCAP_LRO) == 0)
+ if ((if_getcapenable(ifp) & IFCAP_LRO) == 0)
features &= ~VTNET_LRO_FEATURES;
- if ((ifp->if_capenable & IFCAP_VLAN_HWFILTER) == 0)
+ if ((if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER) == 0)
features &= ~VIRTIO_NET_F_CTRL_VLAN;
error = virtio_reinit(dev, features);
@@ -3254,7 +3252,7 @@ vtnet_virtio_reinit(struct vtnet_softc *sc)
static void
vtnet_init_rx_filters(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
ifp = sc->vtnet_ifp;
@@ -3263,7 +3261,7 @@ vtnet_init_rx_filters(struct vtnet_softc *sc)
vtnet_rx_filter_mac(sc);
}
- if (ifp->if_capenable & IFCAP_VLAN_HWFILTER)
+ if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER)
vtnet_rx_filter_vlan(sc);
}
@@ -3271,14 +3269,14 @@ static int
vtnet_init_rx_queues(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
struct vtnet_rxq *rxq;
int i, clustersz, error;
dev = sc->vtnet_dev;
ifp = sc->vtnet_ifp;
- clustersz = vtnet_rx_cluster_size(sc, ifp->if_mtu);
+ clustersz = vtnet_rx_cluster_size(sc, if_getmtu(ifp));
sc->vtnet_rx_clustersz = clustersz;
if (sc->vtnet_flags & VTNET_FLAG_LRO_NOMRG) {
@@ -3368,7 +3366,7 @@ vtnet_set_active_vq_pairs(struct vtnet_softc *sc)
static void
vtnet_update_rx_offloads(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
uint64_t features;
int error;
@@ -3377,15 +3375,15 @@ vtnet_update_rx_offloads(struct vtnet_softc *sc)
VTNET_CORE_LOCK_ASSERT(sc);
- if (ifp->if_capabilities & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) {
- if (ifp->if_capenable & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6))
+ if (if_getcapabilities(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6)) {
+ if (if_getcapenable(ifp) & (IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6))
features |= VIRTIO_NET_F_GUEST_CSUM;
else
features &= ~VIRTIO_NET_F_GUEST_CSUM;
}
- if (ifp->if_capabilities & IFCAP_LRO && !vtnet_software_lro(sc)) {
- if (ifp->if_capenable & IFCAP_LRO)
+ if (if_getcapabilities(ifp) & IFCAP_LRO && !vtnet_software_lro(sc)) {
+ if (if_getcapenable(ifp) & IFCAP_LRO)
features |= VTNET_LRO_FEATURES;
else
features &= ~VTNET_LRO_FEATURES;
@@ -3398,8 +3396,8 @@ vtnet_update_rx_offloads(struct vtnet_softc *sc)
if (error) {
device_printf(sc->vtnet_dev,
"%s: cannot update Rx features\n", __func__);
- if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
- ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
+ if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vtnet_init_locked(sc, 0);
}
} else
@@ -3409,12 +3407,12 @@ vtnet_update_rx_offloads(struct vtnet_softc *sc)
static int
vtnet_reinit(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
int error;
ifp = sc->vtnet_ifp;
- bcopy(IF_LLADDR(ifp), sc->vtnet_hwaddr, ETHER_ADDR_LEN);
+ bcopy(if_getlladdr(ifp), sc->vtnet_hwaddr, ETHER_ADDR_LEN);
error = vtnet_virtio_reinit(sc);
if (error)
@@ -3426,15 +3424,15 @@ vtnet_reinit(struct vtnet_softc *sc)
if (sc->vtnet_flags & VTNET_FLAG_CTRL_VQ)
vtnet_init_rx_filters(sc);
- ifp->if_hwassist = 0;
- if (ifp->if_capenable & IFCAP_TXCSUM)
- ifp->if_hwassist |= VTNET_CSUM_OFFLOAD;
- if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
- ifp->if_hwassist |= VTNET_CSUM_OFFLOAD_IPV6;
- if (ifp->if_capenable & IFCAP_TSO4)
- ifp->if_hwassist |= CSUM_IP_TSO;
- if (ifp->if_capenable & IFCAP_TSO6)
- ifp->if_hwassist |= CSUM_IP6_TSO;
+ if_sethwassist(ifp, 0);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM)
+ if_sethwassistbits(ifp, VTNET_CSUM_OFFLOAD, 0);
+ if (if_getcapenable(ifp) & IFCAP_TXCSUM_IPV6)
+ if_sethwassistbits(ifp, VTNET_CSUM_OFFLOAD_IPV6, 0);
+ if (if_getcapenable(ifp) & IFCAP_TSO4)
+ if_sethwassistbits(ifp, CSUM_IP_TSO, 0);
+ if (if_getcapenable(ifp) & IFCAP_TSO6)
+ if_sethwassistbits(ifp, CSUM_IP6_TSO, 0);
error = vtnet_init_rxtx_queues(sc);
if (error)
@@ -3446,13 +3444,13 @@ vtnet_reinit(struct vtnet_softc *sc)
static void
vtnet_init_locked(struct vtnet_softc *sc, int init_mode)
{
- struct ifnet *ifp;
+ if_t ifp;
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK_ASSERT(sc);
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
return;
vtnet_stop(sc);
@@ -3474,7 +3472,7 @@ vtnet_init_locked(struct vtnet_softc *sc, int init_mode)
return;
}
- ifp->if_drv_flags |= IFF_DRV_RUNNING;
+ if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
vtnet_update_link_status(sc);
vtnet_enable_interrupts(sc);
callout_reset(&sc->vtnet_tick_ch, hz, vtnet_tick, sc);
@@ -3685,21 +3683,21 @@ static void
vtnet_rx_filter(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
dev = sc->vtnet_dev;
ifp = sc->vtnet_ifp;
VTNET_CORE_LOCK_ASSERT(sc);
- if (vtnet_set_promisc(sc, ifp->if_flags & IFF_PROMISC) != 0) {
+ if (vtnet_set_promisc(sc, if_getflags(ifp) & IFF_PROMISC) != 0) {
device_printf(dev, "cannot %s promiscuous mode\n",
- ifp->if_flags & IFF_PROMISC ? "enable" : "disable");
+ if_getflags(ifp) & IFF_PROMISC ? "enable" : "disable");
}
- if (vtnet_set_allmulti(sc, ifp->if_flags & IFF_ALLMULTI) != 0) {
+ if (vtnet_set_allmulti(sc, if_getflags(ifp) & IFF_ALLMULTI) != 0) {
device_printf(dev, "cannot %s all-multicast mode\n",
- ifp->if_flags & IFF_ALLMULTI ? "enable" : "disable");
+ if_getflags(ifp) & IFF_ALLMULTI ? "enable" : "disable");
}
}
@@ -3738,7 +3736,7 @@ vtnet_rx_filter_mac(struct vtnet_softc *sc)
struct vtnet_mac_filter *filter;
struct sglist_seg segs[4];
struct sglist sg;
- struct ifnet *ifp;
+ if_t ifp;
bool promisc, allmulti;
u_int ucnt, mcnt;
int error;
@@ -3867,7 +3865,7 @@ vtnet_rx_filter_vlan(struct vtnet_softc *sc)
static void
vtnet_update_vlan_filter(struct vtnet_softc *sc, int add, uint16_t tag)
{
- struct ifnet *ifp;
+ if_t ifp;
int idx, bit;
ifp = sc->vtnet_ifp;
@@ -3884,8 +3882,8 @@ vtnet_update_vlan_filter(struct vtnet_softc *sc, int add, uint16_t tag)
else
sc->vtnet_vlan_filter[idx] &= ~(1 << bit);
- if (ifp->if_capenable & IFCAP_VLAN_HWFILTER &&
- ifp->if_drv_flags & IFF_DRV_RUNNING &&
+ if (if_getcapenable(ifp) & IFCAP_VLAN_HWFILTER &&
+ if_getdrvflags(ifp) & IFF_DRV_RUNNING &&
vtnet_exec_vlan_filter(sc, add, tag) != 0) {
device_printf(sc->vtnet_dev,
"cannot %s VLAN %d %s the host filter table\n",
@@ -3896,20 +3894,20 @@ vtnet_update_vlan_filter(struct vtnet_softc *sc, int add, uint16_t tag)
}
static void
-vtnet_register_vlan(void *arg, struct ifnet *ifp, uint16_t tag)
+vtnet_register_vlan(void *arg, if_t ifp, uint16_t tag)
{
- if (ifp->if_softc != arg)
+ if (if_getsoftc(ifp) != arg)
return;
vtnet_update_vlan_filter(arg, 1, tag);
}
static void
-vtnet_unregister_vlan(void *arg, struct ifnet *ifp, uint16_t tag)
+vtnet_unregister_vlan(void *arg, if_t ifp, uint16_t tag)
{
- if (ifp->if_softc != arg)
+ if (if_getsoftc(ifp) != arg)
return;
vtnet_update_vlan_filter(arg, 0, tag);
@@ -3918,7 +3916,7 @@ vtnet_unregister_vlan(void *arg, struct ifnet *ifp, uint16_t tag)
static void
vtnet_update_speed_duplex(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
uint32_t speed;
ifp = sc->vtnet_ifp;
@@ -3930,7 +3928,7 @@ vtnet_update_speed_duplex(struct vtnet_softc *sc)
speed = virtio_read_dev_config_4(sc->vtnet_dev,
offsetof(struct virtio_net_config, speed));
if (speed != UINT32_MAX)
- ifp->if_baudrate = IF_Mbps(speed);
+ if_setbaudrate(ifp, IF_Mbps(speed));
}
static int
@@ -3950,7 +3948,7 @@ vtnet_is_link_up(struct vtnet_softc *sc)
static void
vtnet_update_link_status(struct vtnet_softc *sc)
{
- struct ifnet *ifp;
+ if_t ifp;
int link;
ifp = sc->vtnet_ifp;
@@ -3969,17 +3967,17 @@ vtnet_update_link_status(struct vtnet_softc *sc)
}
static int
-vtnet_ifmedia_upd(struct ifnet *ifp __unused)
+vtnet_ifmedia_upd(if_t ifp __unused)
{
return (EOPNOTSUPP);
}
static void
-vtnet_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+vtnet_ifmedia_sts(if_t ifp, struct ifmediareq *ifmr)
{
struct vtnet_softc *sc;
- sc = ifp->if_softc;
+ sc = if_getsoftc(ifp);
ifmr->ifm_status = IFM_AVALID;
ifmr->ifm_active = IFM_ETHER;
@@ -4387,7 +4385,7 @@ vtnet_tunable_int(struct vtnet_softc *sc, const char *knob, int def)
#ifdef DEBUGNET
static void
-vtnet_debugnet_init(struct ifnet *ifp, int *nrxr, int *ncl, int *clsize)
+vtnet_debugnet_init(if_t ifp, int *nrxr, int *ncl, int *clsize)
{
struct vtnet_softc *sc;
@@ -4401,7 +4399,7 @@ vtnet_debugnet_init(struct ifnet *ifp, int *nrxr, int *ncl, int *clsize)
}
static void
-vtnet_debugnet_event(struct ifnet *ifp, enum debugnet_ev event)
+vtnet_debugnet_event(if_t ifp __unused, enum debugnet_ev event)
{
struct vtnet_softc *sc;
static bool sw_lro_enabled = false;
@@ -4425,7 +4423,7 @@ vtnet_debugnet_event(struct ifnet *ifp, enum debugnet_ev event)
}
static int
-vtnet_debugnet_transmit(struct ifnet *ifp, struct mbuf *m)
+vtnet_debugnet_transmit(if_t ifp, struct mbuf *m)
{
struct vtnet_softc *sc;
struct vtnet_txq *txq;
@@ -4444,7 +4442,7 @@ vtnet_debugnet_transmit(struct ifnet *ifp, struct mbuf *m)
}
static int
-vtnet_debugnet_poll(struct ifnet *ifp, int count)
+vtnet_debugnet_poll(if_t ifp, int count)
{
struct vtnet_softc *sc;
int i;
diff --git a/sys/dev/virtio/network/if_vtnetvar.h b/sys/dev/virtio/network/if_vtnetvar.h
index 3f36ff3c1ca4..e4730abd0801 100644
--- a/sys/dev/virtio/network/if_vtnetvar.h
+++ b/sys/dev/virtio/network/if_vtnetvar.h
@@ -142,7 +142,7 @@ struct vtnet_txq {
struct vtnet_softc {
device_t vtnet_dev;
- struct ifnet *vtnet_ifp;
+ if_t vtnet_ifp;
struct vtnet_rxq *vtnet_rxqs;
struct vtnet_txq *vtnet_txqs;
pfil_head_t vtnet_pfil;