The branch main has been updated by jhibbits:

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

commit e330262f34fc179ce920c16bb28ba8a1c4a73aff
Author:     Justin Hibbits <jhibb...@freebsd.org>
AuthorDate: 2023-01-12 18:38:37 +0000
Commit:     Justin Hibbits <jhibb...@freebsd.org>
CommitDate: 2023-02-14 15:21:19 +0000

    Mechanically convert netmap(4) to IfAPI
    
    Reviewed by:    vmaffione, zlei
    Sponsored by:   Juniper Networks, Inc.
    Differential Revision: https://reviews.freebsd.org/D37814
---
 sys/dev/netmap/if_ptnet.c        | 86 +++++++++++++++++++-------------------
 sys/dev/netmap/if_re_netmap.h    | 14 +++----
 sys/dev/netmap/if_vtnet_netmap.h | 22 +++++-----
 sys/dev/netmap/netmap.c          | 44 ++++++++++----------
 sys/dev/netmap/netmap_bdg.c      |  4 +-
 sys/dev/netmap/netmap_bdg.h      |  2 +-
 sys/dev/netmap/netmap_freebsd.c  | 90 ++++++++++++++++++++--------------------
 sys/dev/netmap/netmap_generic.c  | 12 +++---
 sys/dev/netmap/netmap_kern.h     | 74 ++++++++++++++++-----------------
 sys/dev/netmap/netmap_kloop.c    |  2 +-
 sys/dev/netmap/netmap_legacy.c   |  4 +-
 sys/dev/netmap/netmap_mem2.c     | 14 +++----
 sys/dev/netmap/netmap_mem2.h     |  4 +-
 sys/dev/netmap/netmap_monitor.c  |  2 +-
 sys/dev/netmap/netmap_pipe.c     |  2 +-
 sys/dev/netmap/netmap_vale.c     | 14 +++----
 16 files changed, 194 insertions(+), 196 deletions(-)

diff --git a/sys/dev/netmap/if_ptnet.c b/sys/dev/netmap/if_ptnet.c
index be75da2db9dc..5b3332ee5915 100644
--- a/sys/dev/netmap/if_ptnet.c
+++ b/sys/dev/netmap/if_ptnet.c
@@ -408,14 +408,14 @@ ptnet_attach(device_t dev)
        }
 
        if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-       ifp->if_baudrate = IF_Gbps(10);
-       ifp->if_softc = sc;
-       ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX;
-       ifp->if_init = ptnet_init;
-       ifp->if_ioctl = ptnet_ioctl;
-       ifp->if_get_counter = ptnet_get_counter;
-       ifp->if_transmit = ptnet_transmit;
-       ifp->if_qflush = ptnet_qflush;
+       if_setbaudrate(ifp, IF_Gbps(10));
+       if_setsoftc(ifp, sc);
+       if_setflags(ifp, IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX);
+       if_setinitfn(ifp, ptnet_init);
+       if_setioctlfn(ifp, ptnet_ioctl);
+       if_setget_counter(ifp, ptnet_get_counter);
+       if_settransmitfn(ifp, ptnet_transmit);
+       if_setqflushfn(ifp, ptnet_qflush);
 
        ifmedia_init(&sc->media, IFM_IMASK, ptnet_media_change,
                     ptnet_media_status);
@@ -433,25 +433,25 @@ ptnet_attach(device_t dev)
 
        ether_ifattach(ifp, sc->hwaddr);
 
-       ifp->if_hdrlen = sizeof(struct ether_vlan_header);
-       ifp->if_capabilities |= IFCAP_JUMBO_MTU | IFCAP_VLAN_MTU;
+       if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
+       if_setcapabilitiesbit(ifp, IFCAP_JUMBO_MTU | IFCAP_VLAN_MTU, 0);
 
        if (sc->ptfeatures & PTNETMAP_F_VNET_HDR) {
                /* Similarly to what the vtnet driver does, we can emulate
                 * VLAN offloadings 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_HWCSUM | IFCAP_HWCSUM_IPV6
+               if_setcapabilitiesbit(ifp, IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6
                                        | IFCAP_VLAN_HWCSUM
                                        | IFCAP_TSO | IFCAP_LRO
                                        | IFCAP_VLAN_HWTSO
-                                       | IFCAP_VLAN_HWTAGGING;
+                                       | IFCAP_VLAN_HWTAGGING, 0);
        }
 
-       ifp->if_capenable = ifp->if_capabilities;
+       if_setcapenable(ifp, if_getcapabilities(ifp));
 #ifdef DEVICE_POLLING
        /* Don't enable polling by default. */
-       ifp->if_capabilities |= IFCAP_POLLING;
+       if_setcapabilitiesbit(ifp, IFCAP_POLLING, 0);
 #endif
        snprintf(sc->lock_name, sizeof(sc->lock_name),
                 "%s", device_get_nameunit(dev));
@@ -517,7 +517,7 @@ ptnet_detach(device_t dev)
        ptnet_device_shutdown(sc);
 
 #ifdef DEVICE_POLLING
-       if (sc->ifp->if_capenable & IFCAP_POLLING) {
+       if (if_getcapenable(sc->ifp) & IFCAP_POLLING) {
                ether_poll_deregister(sc->ifp);
        }
 #endif
@@ -761,9 +761,9 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
 
        switch (cmd) {
        case SIOCSIFFLAGS:
-               device_printf(dev, "SIOCSIFFLAGS %x\n", ifp->if_flags);
+               device_printf(dev, "SIOCSIFFLAGS %x\n", if_getflags(ifp));
                PTNET_CORE_LOCK(sc);
-               if (ifp->if_flags & IFF_UP) {
+               if (if_getflags(ifp) & IFF_UP) {
                        /* Network stack wants the iff to be up. */
                        err = ptnet_init_locked(sc);
                } else {
@@ -777,8 +777,8 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
 
        case SIOCSIFCAP:
                device_printf(dev, "SIOCSIFCAP %x %x\n",
-                             ifr->ifr_reqcap, ifp->if_capenable);
-               mask = ifr->ifr_reqcap ^ ifp->if_capenable;
+                             ifr->ifr_reqcap, if_getcapenable(ifp));
+               mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
 #ifdef DEVICE_POLLING
                if (mask & IFCAP_POLLING) {
                        struct ptnet_queue *pq;
@@ -790,7 +790,7 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
                                        break;
                                }
                                /* Stop queues and sync with taskqueues. */
-                               ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+                               if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
                                for (i = 0; i < sc->num_rings; i++) {
                                        pq = sc-> queues + i;
                                        /* Make sure the worker sees the
@@ -804,7 +804,7 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
                                                                &pq->task);
                                        }
                                }
-                               ifp->if_drv_flags |= IFF_DRV_RUNNING;
+                               if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
                        } else {
                                err = ether_poll_deregister(ifp);
                                for (i = 0; i < sc->num_rings; i++) {
@@ -816,7 +816,7 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
                        }
                }
 #endif  /* DEVICE_POLLING */
-               ifp->if_capenable = ifr->ifr_reqcap;
+               if_setcapenable(ifp, ifr->ifr_reqcap);
                break;
 
        case SIOCSIFMTU:
@@ -826,7 +826,7 @@ ptnet_ioctl(if_t ifp, u_long cmd, caddr_t data)
                        err = EINVAL;
                } else {
                        PTNET_CORE_LOCK(sc);
-                       ifp->if_mtu = ifr->ifr_mtu;
+                       if_setmtu(ifp, ifr->ifr_mtu);
                        PTNET_CORE_UNLOCK(sc);
                }
                break;
@@ -853,22 +853,22 @@ ptnet_init_locked(struct ptnet_softc *sc)
        unsigned int nm_buf_size;
        int ret;
 
-       if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+       if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
                return 0; /* nothing to do */
        }
 
        device_printf(sc->dev, "%s\n", __func__);
 
        /* Translate offload capabilities according to if_capenable. */
-       ifp->if_hwassist = 0;
-       if (ifp->if_capenable & IFCAP_TXCSUM)
-               ifp->if_hwassist |= PTNET_CSUM_OFFLOAD;
-       if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
-               ifp->if_hwassist |= PTNET_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, PTNET_CSUM_OFFLOAD, 0);
+       if (if_getcapenable(ifp) & IFCAP_TXCSUM_IPV6)
+               if_sethwassistbits(ifp, PTNET_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);
 
        /*
         * Prepare the interface for netmap mode access.
@@ -919,7 +919,7 @@ ptnet_init_locked(struct ptnet_softc *sc)
        callout_reset(&sc->tick, hz, ptnet_tick, sc);
 #endif
 
-       ifp->if_drv_flags |= IFF_DRV_RUNNING;
+       if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0);
 
        return 0;
 
@@ -946,14 +946,14 @@ ptnet_stop(struct ptnet_softc *sc)
 
        device_printf(sc->dev, "%s\n", __func__);
 
-       if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
+       if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) {
                return 0; /* nothing to do */
        }
 
        /* Clear the driver-ready flag, and synchronize with all the queues,
         * so that after this loop we are sure nobody is working anymore with
         * the device. This scheme is taken from the vtnet driver. */
-       ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+       if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
        callout_stop(&sc->tick);
        for (i = 0; i < sc->num_rings; i++) {
                PTNET_Q_LOCK(sc->queues + i);
@@ -1198,7 +1198,7 @@ ptnet_nm_register(struct netmap_adapter *na, int onoff)
                                pq = sc->queues + i;
                                pq->ktoa->kern_need_kick = 1;
                                pq->atok->appl_need_kick =
-                                       (!(ifp->if_capenable & IFCAP_POLLING)
+                                       (!(if_getcapenable(ifp) & IFCAP_POLLING)
                                                && i >= sc->num_tx_rings);
                        }
 
@@ -1407,7 +1407,7 @@ ptnet_drain_transmit_queue(struct ptnet_queue *pq, 
unsigned int budget,
                return 0;
        }
 
-       if (unlikely(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) {
+       if (unlikely(!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))) {
                PTNET_Q_UNLOCK(pq);
                nm_prlim(1, "Interface is down");
                return ENETDOWN;
@@ -1609,7 +1609,7 @@ ptnet_transmit(if_t ifp, struct mbuf *m)
                return err;
        }
 
-       if (ifp->if_capenable & IFCAP_POLLING) {
+       if (if_getcapenable(ifp) & IFCAP_POLLING) {
                /* If polling is on, the transmit queues will be
                 * drained by the poller. */
                return 0;
@@ -1693,7 +1693,7 @@ ptnet_rx_eof(struct ptnet_queue *pq, unsigned int budget, 
bool may_resched)
 
        PTNET_Q_LOCK(pq);
 
-       if (unlikely(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) {
+       if (unlikely(!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))) {
                goto unlock;
        }
 
@@ -1837,7 +1837,7 @@ host_sync:
                mhead->m_pkthdr.flowid = pq->kring_id;
                M_HASHTYPE_SET(mhead, M_HASHTYPE_OPAQUE);
 
-               if (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) {
+               if (if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) {
                        struct ether_header *eh;
 
                        eh = mtod(mhead, struct ether_header *);
@@ -1874,7 +1874,7 @@ skip:
                        pq->stats.bytes += mhead->m_pkthdr.len;
 
                        PTNET_Q_UNLOCK(pq);
-                       (*ifp->if_input)(ifp, mhead);
+                       if_input(ifp, mhead);
                        PTNET_Q_LOCK(pq);
                        /* The ring->head index (and related indices) are
                         * updated under pq lock by ptnet_ring_update().
@@ -1883,7 +1883,7 @@ skip:
                         * ring from there. */
                        head = ring->head;
 
-                       if (unlikely(!(ifp->if_drv_flags & IFF_DRV_RUNNING))) {
+                       if (unlikely(!(if_getdrvflags(ifp) & IFF_DRV_RUNNING))) 
{
                                /* The interface has gone down while we didn't
                                 * have the lock. Stop any processing and exit. 
*/
                                goto unlock;
diff --git a/sys/dev/netmap/if_re_netmap.h b/sys/dev/netmap/if_re_netmap.h
index 7c356ab4bd22..d658a3e5c8a7 100644
--- a/sys/dev/netmap/if_re_netmap.h
+++ b/sys/dev/netmap/if_re_netmap.h
@@ -47,8 +47,8 @@
 static int
 re_netmap_reg(struct netmap_adapter *na, int onoff)
 {
-       struct ifnet *ifp = na->ifp;
-       struct rl_softc *adapter = ifp->if_softc;
+       if_t ifp = na->ifp;
+       struct rl_softc *adapter = if_getsoftc(ifp);
 
        RL_LOCK(adapter);
        re_stop(adapter); /* also clears IFF_DRV_RUNNING */
@@ -59,7 +59,7 @@ re_netmap_reg(struct netmap_adapter *na, int onoff)
        }
        re_init_locked(adapter);        /* also enables intr */
        RL_UNLOCK(adapter);
-       return (ifp->if_drv_flags & IFF_DRV_RUNNING ? 0 : 1);
+       return (if_getdrvflags(ifp) & IFF_DRV_RUNNING ? 0 : 1);
 }
 
 
@@ -70,7 +70,7 @@ static int
 re_netmap_txsync(struct netmap_kring *kring, int flags)
 {
        struct netmap_adapter *na = kring->na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int nm_i;     /* index into the netmap ring */
        u_int nic_i;    /* index into the NIC ring */
@@ -79,7 +79,7 @@ re_netmap_txsync(struct netmap_kring *kring, int flags)
        u_int const head = kring->rhead;
 
        /* device-specific */
-       struct rl_softc *sc = ifp->if_softc;
+       struct rl_softc *sc = if_getsoftc(ifp);
        struct rl_txdesc *txd = sc->rl_ldata.rl_tx_desc;
 
        bus_dmamap_sync(sc->rl_ldata.rl_tx_list_tag,
@@ -172,7 +172,7 @@ static int
 re_netmap_rxsync(struct netmap_kring *kring, int flags)
 {
        struct netmap_adapter *na = kring->na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int nm_i;     /* index into the netmap ring */
        u_int nic_i;    /* index into the NIC ring */
@@ -181,7 +181,7 @@ re_netmap_rxsync(struct netmap_kring *kring, int flags)
        int force_update = (flags & NAF_FORCE_READ) || kring->nr_kflags & 
NKR_PENDINTR;
 
        /* device-specific */
-       struct rl_softc *sc = ifp->if_softc;
+       struct rl_softc *sc = if_getsoftc(ifp);
        struct rl_rxdesc *rxd = sc->rl_ldata.rl_rx_desc;
 
        if (head > lim)
diff --git a/sys/dev/netmap/if_vtnet_netmap.h b/sys/dev/netmap/if_vtnet_netmap.h
index 8bff697b3fdb..fc18976ee023 100644
--- a/sys/dev/netmap/if_vtnet_netmap.h
+++ b/sys/dev/netmap/if_vtnet_netmap.h
@@ -37,15 +37,15 @@
 static int
 vtnet_netmap_reg(struct netmap_adapter *na, int state)
 {
-       struct ifnet *ifp = na->ifp;
-       struct vtnet_softc *sc = ifp->if_softc;
+       if_t ifp = na->ifp;
+       struct vtnet_softc *sc = if_getsoftc(ifp);
 
        /*
         * Trigger a device reinit, asking vtnet_init_locked() to
         * also enter or exit netmap mode.
         */
        VTNET_CORE_LOCK(sc);
-       ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+       if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
        vtnet_init_locked(sc, state ? VTNET_INIT_NETMAP_ENTER
            : VTNET_INIT_NETMAP_EXIT);
        VTNET_CORE_UNLOCK(sc);
@@ -59,7 +59,7 @@ static int
 vtnet_netmap_txsync(struct netmap_kring *kring, int flags)
 {
        struct netmap_adapter *na = kring->na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int ring_nr = kring->ring_id;
        u_int nm_i;     /* index into the netmap ring */
@@ -67,7 +67,7 @@ vtnet_netmap_txsync(struct netmap_kring *kring, int flags)
        u_int const head = kring->rhead;
 
        /* device-specific */
-       struct vtnet_softc *sc = ifp->if_softc;
+       struct vtnet_softc *sc = if_getsoftc(ifp);
        struct vtnet_txq *txq = &sc->vtnet_txqs[ring_nr];
        struct virtqueue *vq = txq->vtntx_vq;
        int interrupts = !(kring->nr_kflags & NKR_NOINTR);
@@ -154,14 +154,14 @@ static int
 vtnet_netmap_kring_refill(struct netmap_kring *kring, u_int num)
 {
        struct netmap_adapter *na = kring->na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int ring_nr = kring->ring_id;
        u_int const lim = kring->nkr_num_slots - 1;
        u_int nm_i;
 
        /* device-specific */
-       struct vtnet_softc *sc = ifp->if_softc;
+       struct vtnet_softc *sc = if_getsoftc(ifp);
        struct vtnet_rxq *rxq = &sc->vtnet_rxqs[ring_nr];
        struct virtqueue *vq = rxq->vtnrx_vq;
 
@@ -245,7 +245,7 @@ static int
 vtnet_netmap_rxsync(struct netmap_kring *kring, int flags)
 {
        struct netmap_adapter *na = kring->na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int ring_nr = kring->ring_id;
        u_int nm_i;     /* index into the netmap ring */
@@ -256,7 +256,7 @@ vtnet_netmap_rxsync(struct netmap_kring *kring, int flags)
        int interrupts = !(kring->nr_kflags & NKR_NOINTR);
 
        /* device-specific */
-       struct vtnet_softc *sc = ifp->if_softc;
+       struct vtnet_softc *sc = if_getsoftc(ifp);
        struct vtnet_rxq *rxq = &sc->vtnet_rxqs[ring_nr];
        struct virtqueue *vq = rxq->vtnrx_vq;
 
@@ -349,7 +349,7 @@ vtnet_netmap_rxsync(struct netmap_kring *kring, int flags)
 static void
 vtnet_netmap_intr(struct netmap_adapter *na, int state)
 {
-       struct vtnet_softc *sc = na->ifp->if_softc;
+       struct vtnet_softc *sc = if_getsoftc(na->ifp);
        int i;
 
        for (i = 0; i < sc->vtnet_max_vq_pairs; i++) {
@@ -416,7 +416,7 @@ vtnet_netmap_rx_slots(struct vtnet_softc *sc)
 static int
 vtnet_netmap_config(struct netmap_adapter *na, struct nm_config_info *info)
 {
-       struct vtnet_softc *sc = na->ifp->if_softc;
+       struct vtnet_softc *sc = if_getsoftc(na->ifp);
 
        info->num_tx_rings = sc->vtnet_act_vq_pairs;
        info->num_rx_rings = sc->vtnet_act_vq_pairs;
diff --git a/sys/dev/netmap/netmap.c b/sys/dev/netmap/netmap.c
index 37723fb36fe8..acc05513fbb2 100644
--- a/sys/dev/netmap/netmap.c
+++ b/sys/dev/netmap/netmap.c
@@ -637,7 +637,7 @@ netmap_set_all_rings(struct netmap_adapter *na, int stopped)
  * onload).
  */
 void
-netmap_disable_all_rings(struct ifnet *ifp)
+netmap_disable_all_rings(if_t ifp)
 {
        if (NM_NA_VALID(ifp)) {
                netmap_set_all_rings(NA(ifp), NM_KR_LOCKED);
@@ -650,7 +650,7 @@ netmap_disable_all_rings(struct ifnet *ifp)
  * napi_enable().
  */
 void
-netmap_enable_all_rings(struct ifnet *ifp)
+netmap_enable_all_rings(if_t ifp)
 {
        if (NM_NA_VALID(ifp)) {
                netmap_set_all_rings(NA(ifp), 0 /* enabled */);
@@ -658,7 +658,7 @@ netmap_enable_all_rings(struct ifnet *ifp)
 }
 
 void
-netmap_make_zombie(struct ifnet *ifp)
+netmap_make_zombie(if_t ifp)
 {
        if (NM_NA_VALID(ifp)) {
                struct netmap_adapter *na = NA(ifp);
@@ -669,7 +669,7 @@ netmap_make_zombie(struct ifnet *ifp)
 }
 
 void
-netmap_undo_zombie(struct ifnet *ifp)
+netmap_undo_zombie(if_t ifp)
 {
        if (NM_NA_VALID(ifp)) {
                struct netmap_adapter *na = NA(ifp);
@@ -764,7 +764,7 @@ netmap_update_config(struct netmap_adapter *na)
        struct nm_config_info info;
 
        if (na->ifp && !nm_is_bwrap(na)) {
-               strlcpy(na->name, na->ifp->if_xname, sizeof(na->name));
+               strlcpy(na->name, if_name(na->ifp), sizeof(na->name));
        }
 
        bzero(&info, sizeof(info));
@@ -1194,7 +1194,7 @@ netmap_dtor(void *data)
  * After this call the queue is empty.
  */
 static void
-netmap_send_up(struct ifnet *dst, struct mbq *q)
+netmap_send_up(if_t dst, struct mbq *q)
 {
        struct mbuf *m;
        struct mbuf *head = NULL, *prev = NULL;
@@ -1465,7 +1465,7 @@ netmap_rxsync_from_host(struct netmap_kring *kring, int 
flags)
  */
 static void netmap_hw_dtor(struct netmap_adapter *); /* needed by 
NM_IS_NATIVE() */
 int
-netmap_get_hw_na(struct ifnet *ifp, struct netmap_mem_d *nmd, struct 
netmap_adapter **na)
+netmap_get_hw_na(if_t ifp, struct netmap_mem_d *nmd, struct netmap_adapter 
**na)
 {
        /* generic support */
        int i = netmap_admode;  /* Take a snapshot. */
@@ -1555,7 +1555,7 @@ assign_mem:
  */
 int
 netmap_get_na(struct nmreq_header *hdr,
-             struct netmap_adapter **na, struct ifnet **ifp,
+             struct netmap_adapter **na, if_t *ifp,
              struct netmap_mem_d *nmd, int create)
 {
        struct nmreq_register *req = (struct nmreq_register 
*)(uintptr_t)hdr->nr_body;
@@ -1671,7 +1671,7 @@ out:
 
 /* undo netmap_get_na() */
 void
-netmap_unget_na(struct netmap_adapter *na, struct ifnet *ifp)
+netmap_unget_na(struct netmap_adapter *na, if_t ifp)
 {
        if (ifp)
                if_rele(ifp);
@@ -2256,12 +2256,12 @@ netmap_buf_size_validate(const struct netmap_adapter 
*na, unsigned mtu) {
                        nm_prerr("error: large MTU (%d) needed "
                                 "but %s does not support "
                                 "NS_MOREFRAG", mtu,
-                                na->ifp->if_xname);
+                                if_name(na->ifp));
                        return EINVAL;
                } else if (nbs < na->rx_buf_maxsize) {
                        nm_prerr("error: using NS_MOREFRAG on "
                                 "%s requires netmap buf size "
-                                ">= %u", na->ifp->if_xname,
+                                ">= %u", if_name(na->ifp),
                                 na->rx_buf_maxsize);
                        return EINVAL;
                } else {
@@ -2269,7 +2269,7 @@ netmap_buf_size_validate(const struct netmap_adapter *na, 
unsigned mtu) {
                                 "%s needs to support "
                                 "NS_MOREFRAG "
                                 "(MTU=%u,netmap_buf_size=%u)",
-                                na->ifp->if_xname, mtu, nbs);
+                                if_name(na->ifp), mtu, nbs);
                }
        }
        return 0;
@@ -2744,7 +2744,7 @@ netmap_ioctl(struct netmap_priv_d *priv, u_long cmd, 
caddr_t data,
        struct mbq q;   /* packets from RX hw queues to host stack */
        struct netmap_adapter *na = NULL;
        struct netmap_mem_d *nmd = NULL;
-       struct ifnet *ifp = NULL;
+       if_t ifp = NULL;
        int error = 0;
        u_int i, qfirst, qlast;
        struct netmap_kring **krings;
@@ -3039,7 +3039,7 @@ netmap_ioctl(struct netmap_priv_d *priv, u_long cmd, 
caddr_t data,
                        /* Build a nmreq_register out of the nmreq_port_hdr,
                         * so that we can call netmap_get_bdg_na(). */
                        struct nmreq_register regreq;
-                       struct ifnet *ifp;
+                       if_t ifp;
 
                        bzero(&regreq, sizeof(regreq));
                        regreq.nr_mode = NR_REG_ALL_NIC;
@@ -3973,7 +3973,7 @@ netmap_attach_common(struct netmap_adapter *na)
 
 #ifdef __FreeBSD__
        if (na->na_flags & NAF_HOST_RINGS && na->ifp) {
-               na->if_input = na->ifp->if_input; /* for netmap_send_up */
+               na->if_input = if_getinputfn(na->ifp); /* for netmap_send_up */
        }
        na->pdev = na; /* make sure netmap_mem_map() is called */
 #endif /* __FreeBSD__ */
@@ -4063,7 +4063,7 @@ int
 netmap_attach_ext(struct netmap_adapter *arg, size_t size, int override_reg)
 {
        struct netmap_hw_adapter *hwna = NULL;
-       struct ifnet *ifp = NULL;
+       if_t ifp = NULL;
 
        if (size < sizeof(struct netmap_hw_adapter)) {
                if (netmap_debug & NM_DEBUG_ON)
@@ -4099,7 +4099,7 @@ netmap_attach_ext(struct netmap_adapter *arg, size_t 
size, int override_reg)
                goto fail;
        hwna->up = *arg;
        hwna->up.na_flags |= NAF_HOST_RINGS | NAF_NATIVE;
-       strlcpy(hwna->up.name, ifp->if_xname, sizeof(hwna->up.name));
+       strlcpy(hwna->up.name, if_name(ifp), sizeof(hwna->up.name));
        if (override_reg) {
                hwna->nm_hw_register = hwna->up.nm_register;
                hwna->up.nm_register = netmap_hw_reg;
@@ -4197,7 +4197,7 @@ netmap_hw_krings_create(struct netmap_adapter *na)
  * Called on module unload by the netmap-enabled drivers
  */
 void
-netmap_detach(struct ifnet *ifp)
+netmap_detach(if_t ifp)
 {
        struct netmap_adapter *na;
 
@@ -4243,7 +4243,7 @@ netmap_detach(struct ifnet *ifp)
  * we make sure to make the mode change visible here.
  */
 int
-netmap_transmit(struct ifnet *ifp, struct mbuf *m)
+netmap_transmit(if_t ifp, struct mbuf *m)
 {
        struct netmap_adapter *na = NA(ifp);
        struct netmap_kring *kring, *tx_kring;
@@ -4483,7 +4483,7 @@ netmap_common_irq(struct netmap_adapter *na, u_int q, 
u_int *work_done)
  * calls the proper forwarding routine.
  */
 int
-netmap_rx_irq(struct ifnet *ifp, u_int q, u_int *work_done)
+netmap_rx_irq(if_t ifp, u_int q, u_int *work_done)
 {
        struct netmap_adapter *na = NA(ifp);
 
@@ -4508,7 +4508,7 @@ netmap_rx_irq(struct ifnet *ifp, u_int q, u_int 
*work_done)
 void
 nm_set_native_flags(struct netmap_adapter *na)
 {
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
 
        /* We do the setup for intercepting packets only if we are the
         * first user of this adapter. */
@@ -4524,7 +4524,7 @@ nm_set_native_flags(struct netmap_adapter *na)
 void
 nm_clear_native_flags(struct netmap_adapter *na)
 {
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
 
        /* We undo the setup for intercepting packets only if we are the
         * last user of this adapter. */
diff --git a/sys/dev/netmap/netmap_bdg.c b/sys/dev/netmap/netmap_bdg.c
index 1d49a97eec12..62b4c8801a47 100644
--- a/sys/dev/netmap/netmap_bdg.c
+++ b/sys/dev/netmap/netmap_bdg.c
@@ -390,7 +390,7 @@ netmap_get_bdg_na(struct nmreq_header *hdr, struct 
netmap_adapter **na,
 {
        char *nr_name = hdr->nr_name;
        const char *ifname;
-       struct ifnet *ifp = NULL;
+       if_t ifp = NULL;
        int error = 0;
        struct netmap_vp_adapter *vpna, *hostna = NULL;
        struct nm_bridge *b;
@@ -1777,7 +1777,7 @@ netmap_bwrap_attach_common(struct netmap_adapter *na,
                na->na_flags |= NAF_MOREFRAG;
 
        nm_prdis("%s<->%s txr %d txd %d rxr %d rxd %d",
-               na->name, ifp->if_xname,
+               na->name, if_name(ifp),
                na->num_tx_rings, na->num_tx_desc,
                na->num_rx_rings, na->num_rx_desc);
 
diff --git a/sys/dev/netmap/netmap_bdg.h b/sys/dev/netmap/netmap_bdg.h
index ac8629141601..f5148c7407b7 100644
--- a/sys/dev/netmap/netmap_bdg.h
+++ b/sys/dev/netmap/netmap_bdg.h
@@ -59,7 +59,7 @@ typedef int (*bdg_config_fn_t)(struct nm_ifreq *);
 typedef void (*bdg_dtor_fn_t)(const struct netmap_vp_adapter *);
 typedef void *(*bdg_update_private_data_fn_t)(void *private_data, void 
*callback_data, int *error);
 typedef int (*bdg_vp_create_fn_t)(struct nmreq_header *hdr,
-               struct ifnet *ifp, struct netmap_mem_d *nmd,
+               if_t ifp, struct netmap_mem_d *nmd,
                struct netmap_vp_adapter **ret);
 typedef int (*bdg_bwrap_attach_fn_t)(const char *nr_name, struct 
netmap_adapter *hwna);
 struct netmap_bdg_ops {
diff --git a/sys/dev/netmap/netmap_freebsd.c b/sys/dev/netmap/netmap_freebsd.c
index 8c480f2fb092..3b2fdd214f24 100644
--- a/sys/dev/netmap/netmap_freebsd.c
+++ b/sys/dev/netmap/netmap_freebsd.c
@@ -171,13 +171,13 @@ nm_os_put_module(void)
 }
 
 static void
-netmap_ifnet_arrival_handler(void *arg __unused, struct ifnet *ifp)
+netmap_ifnet_arrival_handler(void *arg __unused, if_t ifp)
 {
        netmap_undo_zombie(ifp);
 }
 
 static void
-netmap_ifnet_departure_handler(void *arg __unused, struct ifnet *ifp)
+netmap_ifnet_departure_handler(void *arg __unused, if_t ifp)
 {
        netmap_make_zombie(ifp);
 }
@@ -209,9 +209,9 @@ nm_os_ifnet_fini(void)
 }
 
 unsigned
-nm_os_ifnet_mtu(struct ifnet *ifp)
+nm_os_ifnet_mtu(if_t ifp)
 {
-       return ifp->if_mtu;
+       return if_getmtu(ifp);
 }
 
 rawsum_t
@@ -294,7 +294,7 @@ nm_os_csum_tcpudp_ipv6(struct nm_ipv6hdr *ip6h, void *data,
 
 /* on FreeBSD we send up one packet at a time */
 void *
-nm_os_send_up(struct ifnet *ifp, struct mbuf *m, struct mbuf *prev)
+nm_os_send_up(if_t ifp, struct mbuf *m, struct mbuf *prev)
 {
        NA(ifp)->if_input(ifp, m);
        return NULL;
@@ -315,7 +315,7 @@ nm_os_mbuf_has_seg_offld(struct mbuf *m)
 }
 
 static void
-freebsd_generic_rx_handler(struct ifnet *ifp, struct mbuf *m)
+freebsd_generic_rx_handler(if_t ifp, struct mbuf *m)
 {
        int stolen;
 
@@ -341,7 +341,7 @@ int
 nm_os_catch_rx(struct netmap_generic_adapter *gna, int intercept)
 {
        struct netmap_adapter *na = &gna->up.up;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        int ret = 0;
 
        nm_os_ifnet_lock();
@@ -351,10 +351,9 @@ nm_os_catch_rx(struct netmap_generic_adapter *gna, int 
intercept)
                        ret = EBUSY; /* already set */
                        goto out;
                }
-
-               ifp->if_capenable |= IFCAP_NETMAP;
-               gna->save_if_input = ifp->if_input;
-               ifp->if_input = freebsd_generic_rx_handler;
+               if_setcapenablebit(ifp, IFCAP_NETMAP, 0);
+               gna->save_if_input = if_getinputfn(ifp);
+               if_setinputfn(ifp, freebsd_generic_rx_handler);
        } else {
                if (!gna->save_if_input) {
                        nm_prerr("Failed to undo RX intercept on %s",
@@ -362,9 +361,8 @@ nm_os_catch_rx(struct netmap_generic_adapter *gna, int 
intercept)
                        ret = EINVAL;  /* not saved */
                        goto out;
                }
-
-               ifp->if_capenable &= ~IFCAP_NETMAP;
-               ifp->if_input = gna->save_if_input;
+               if_setcapenablebit(ifp, 0, IFCAP_NETMAP);
+               if_setinputfn(ifp, gna->save_if_input);
                gna->save_if_input = NULL;
        }
 out:
@@ -384,14 +382,14 @@ int
 nm_os_catch_tx(struct netmap_generic_adapter *gna, int intercept)
 {
        struct netmap_adapter *na = &gna->up.up;
-       struct ifnet *ifp = netmap_generic_getifp(gna);
+       if_t ifp = netmap_generic_getifp(gna);
 
        nm_os_ifnet_lock();
        if (intercept) {
-               na->if_transmit = ifp->if_transmit;
-               ifp->if_transmit = netmap_transmit;
+               na->if_transmit = if_gettransmitfn(ifp);
+               if_settransmitfn(ifp, netmap_transmit);
        } else {
-               ifp->if_transmit = na->if_transmit;
+               if_settransmitfn(ifp, na->if_transmit);
        }
        nm_os_ifnet_unlock();
 
@@ -420,7 +418,7 @@ nm_os_generic_xmit_frame(struct nm_os_gen_arg *a)
 {
        int ret;
        u_int len = a->len;
-       struct ifnet *ifp = a->ifp;
+       if_t ifp = a->ifp;
        struct mbuf *m = a->m;
 
        /* Link the external storage to
@@ -437,7 +435,7 @@ nm_os_generic_xmit_frame(struct nm_os_gen_arg *a)
        M_HASHTYPE_SET(m, M_HASHTYPE_OPAQUE);
        m->m_pkthdr.flowid = a->ring_nr;
        m->m_pkthdr.rcvif = ifp; /* used for tx notification */
-       CURVNET_SET(ifp->if_vnet);
+       CURVNET_SET(if_getvnet(ifp));
        ret = NA(ifp)->if_transmit(ifp, m);
        CURVNET_RESTORE();
        return ret ? -1 : 0;
@@ -447,7 +445,7 @@ nm_os_generic_xmit_frame(struct nm_os_gen_arg *a)
 struct netmap_adapter *
 netmap_getna(if_t ifp)
 {
-       return (NA((struct ifnet *)ifp));
+       return (NA(ifp));
 }
 
 /*
@@ -455,14 +453,14 @@ netmap_getna(if_t ifp)
  * way to extract the info from the ifp
  */
 int
-nm_os_generic_find_num_desc(struct ifnet *ifp, unsigned int *tx, unsigned int 
*rx)
+nm_os_generic_find_num_desc(if_t ifp, unsigned int *tx, unsigned int *rx)
 {
        return 0;
 }
 
 
 void
-nm_os_generic_find_num_queues(struct ifnet *ifp, u_int *txq, u_int *rxq)
+nm_os_generic_find_num_queues(if_t ifp, u_int *txq, u_int *rxq)
 {
        unsigned num_rings = netmap_generic_rings ? netmap_generic_rings : 1;
 
@@ -513,14 +511,14 @@ nm_os_mitigation_cleanup(struct nm_generic_mit *mit)
 }
 
 static int
-nm_vi_dummy(struct ifnet *ifp, u_long cmd, caddr_t addr)
+nm_vi_dummy(if_t ifp, u_long cmd, caddr_t addr)
 {
 
        return EINVAL;
 }
 
 static void
-nm_vi_start(struct ifnet *ifp)
+nm_vi_start(if_t ifp)
 {
        panic("nm_vi_start() must not be called");
 }
@@ -594,9 +592,9 @@ nm_vi_free_index(uint8_t val)
  * increment this refcount on if_attach().
  */
 int
-nm_os_vi_persist(const char *name, struct ifnet **ret)
+nm_os_vi_persist(const char *name, if_t *ret)
 {
-       struct ifnet *ifp;
+       if_t ifp;
        u_short macaddr_hi;
        uint32_t macaddr_mid;
        u_char eaddr[6];
@@ -620,14 +618,14 @@ nm_os_vi_persist(const char *name, struct ifnet **ret)
                return ENOMEM;
        }
        if_initname(ifp, name, IF_DUNIT_NONE);
-       ifp->if_flags = IFF_UP | IFF_SIMPLEX | IFF_MULTICAST;
-       ifp->if_init = (void *)nm_vi_dummy;
-       ifp->if_ioctl = nm_vi_dummy;
-       ifp->if_start = nm_vi_start;
-       ifp->if_mtu = ETHERMTU;
-       IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
-       ifp->if_capabilities |= IFCAP_LINKSTATE;
-       ifp->if_capenable |= IFCAP_LINKSTATE;
+       if_setflags(ifp, IFF_UP | IFF_SIMPLEX | IFF_MULTICAST);
+       if_setinitfn(ifp, (void *)nm_vi_dummy);
+       if_setioctlfn(ifp, nm_vi_dummy);
+       if_setstartfn(ifp, nm_vi_start);
+       if_setmtu(ifp, ETHERMTU);
+       if_setsendqlen(ifp, ifqmaxlen);
+       if_setcapabilitiesbit(ifp, IFCAP_LINKSTATE, 0);
+       if_setcapenablebit(ifp, IFCAP_LINKSTATE, 0);
 
        ether_ifattach(ifp, eaddr);
        *ret = ifp;
@@ -636,9 +634,9 @@ nm_os_vi_persist(const char *name, struct ifnet **ret)
 
 /* unregister from the system and drop the final refcount */
 void
-nm_os_vi_detach(struct ifnet *ifp)
+nm_os_vi_detach(if_t ifp)
 {
-       nm_vi_free_index(((char *)IF_LLADDR(ifp))[5]);
+       nm_vi_free_index(((char *)if_getlladdr(ifp))[5]);
        ether_ifdetach(ifp);
        if_free(ifp);
 }
@@ -1502,28 +1500,28 @@ out:
 }
 
 void
-nm_os_onattach(struct ifnet *ifp)
+nm_os_onattach(if_t ifp)
 {
-       ifp->if_capabilities |= IFCAP_NETMAP;
+       if_setcapabilitiesbit(ifp, IFCAP_NETMAP, 0);
 }
 
 void
-nm_os_onenter(struct ifnet *ifp)
+nm_os_onenter(if_t ifp)
 {
        struct netmap_adapter *na = NA(ifp);
 
-       na->if_transmit = ifp->if_transmit;
-       ifp->if_transmit = netmap_transmit;
-       ifp->if_capenable |= IFCAP_NETMAP;
+       na->if_transmit = if_gettransmitfn(ifp);
+       if_settransmitfn(ifp, netmap_transmit);
+       if_setcapenablebit(ifp, IFCAP_NETMAP, 0);
 }
 
 void
-nm_os_onexit(struct ifnet *ifp)
+nm_os_onexit(if_t ifp)
 {
        struct netmap_adapter *na = NA(ifp);
 
-       ifp->if_transmit = na->if_transmit;
-       ifp->if_capenable &= ~IFCAP_NETMAP;
+       if_settransmitfn(ifp, na->if_transmit);
+       if_setcapenablebit(ifp, 0, IFCAP_NETMAP);
 }
 
 extern struct cdevsw netmap_cdevsw; /* XXX used in netmap.c, should go 
elsewhere */
diff --git a/sys/dev/netmap/netmap_generic.c b/sys/dev/netmap/netmap_generic.c
index 83908f10a3fe..038d6efc33f5 100644
--- a/sys/dev/netmap/netmap_generic.c
+++ b/sys/dev/netmap/netmap_generic.c
@@ -647,7 +647,7 @@ generic_netmap_txsync(struct netmap_kring *kring, int flags)
 {
        struct netmap_adapter *na = kring->na;
        struct netmap_generic_adapter *gna = (struct netmap_generic_adapter 
*)na;
-       struct ifnet *ifp = na->ifp;
+       if_t ifp = na->ifp;
        struct netmap_ring *ring = kring->ring;
        u_int nm_i;     /* index into the netmap ring */ // j
        u_int const lim = kring->nkr_num_slots - 1;
@@ -811,7 +811,7 @@ generic_netmap_txsync(struct netmap_kring *kring, int flags)
  * Returns 1 if the packet was stolen, 0 otherwise.
  */
 int
-generic_rx_handler(struct ifnet *ifp, struct mbuf *m)
+generic_rx_handler(if_t ifp, struct mbuf *m)
 {
        struct netmap_adapter *na = NA(ifp);
        struct netmap_generic_adapter *gna = (struct netmap_generic_adapter 
*)na;
@@ -1019,7 +1019,7 @@ static void
 generic_netmap_dtor(struct netmap_adapter *na)
 {
        struct netmap_generic_adapter *gna = (struct netmap_generic_adapter*)na;
-       struct ifnet *ifp = netmap_generic_getifp(gna);
+       if_t ifp = netmap_generic_getifp(gna);
        struct netmap_adapter *prev_na = gna->prev;
 
        if (prev_na != NULL) {
@@ -1060,7 +1060,7 @@ na_is_generic(struct netmap_adapter *na)
  * actual configuration.
  */
 int
-generic_netmap_attach(struct ifnet *ifp)
+generic_netmap_attach(if_t ifp)
 {
        struct netmap_adapter *na;
        struct netmap_generic_adapter *gna;
@@ -1068,7 +1068,7 @@ generic_netmap_attach(struct ifnet *ifp)
        u_int num_tx_desc, num_rx_desc;
 
 #ifdef __FreeBSD__
-       if (ifp->if_type == IFT_LOOP) {
+       if (if_gettype(ifp) == IFT_LOOP) {
                nm_prerr("if_loop is not supported by %s", __func__);
                return EINVAL;
        }
@@ -1097,7 +1097,7 @@ generic_netmap_attach(struct ifnet *ifp)
                return ENOMEM;
        }
        na = (struct netmap_adapter *)gna;
-       strlcpy(na->name, ifp->if_xname, sizeof(na->name));
+       strlcpy(na->name, if_name(ifp), sizeof(na->name));
        na->ifp = ifp;
        na->num_tx_desc = num_tx_desc;
        na->num_rx_desc = num_rx_desc;
diff --git a/sys/dev/netmap/netmap_kern.h b/sys/dev/netmap/netmap_kern.h
index eb708f5a5cc7..b4c7e4c83f6b 100644
--- a/sys/dev/netmap/netmap_kern.h
+++ b/sys/dev/netmap/netmap_kern.h
@@ -110,7 +110,7 @@
 #define NM_ATOMIC_TEST_AND_SET(p)       (!atomic_cmpset_acq_int((p), 0, 1))
 #define NM_ATOMIC_CLEAR(p)              atomic_store_rel_int((p), 0)
 
*** 434 LINES SKIPPED ***


Reply via email to