Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F152780076
D37799.id115547.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
27 KB
Referenced Files
None
Subscribers
None
D37799.id115547.diff
View Options
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -118,8 +118,8 @@
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 @@
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_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 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 @@
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 @@
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 @@
vtnet_alloc_interface(struct vtnet_softc *sc)
{
device_t dev;
- struct ifnet *ifp;
+ if_t ifp;
dev = sc->vtnet_dev;
@@ -1087,7 +1087,7 @@
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 @@
{
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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 @@
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 @@
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 @@
{
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 @@
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 @@
#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 @@
#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_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 @@
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 @@
}
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 @@
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_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 @@
}
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 @@
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 @@
{
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_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 @@
{
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_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 @@
#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 @@
static int
vtnet_watchdog(struct vtnet_txq *txq)
{
- struct ifnet *ifp;
+ if_t ifp;
ifp = txq->vtntx_sc->vtnet_ifp;
@@ -3034,7 +3032,7 @@
vtnet_tick(void *xsc)
{
struct vtnet_softc *sc;
- struct ifnet *ifp;
+ if_t ifp;
int i, timedout;
sc = xsc;
@@ -3047,7 +3045,7 @@
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 @@
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 @@
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 @@
* 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 @@
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_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 @@
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 @@
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_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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
}
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 @@
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 @@
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 @@
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 @@
}
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 @@
#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 @@
}
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 @@
}
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 @@
}
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
--- a/sys/dev/virtio/network/if_vtnetvar.h
+++ b/sys/dev/virtio/network/if_vtnetvar.h
@@ -142,7 +142,7 @@
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;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 18, 1:39 AM (52 m, 14 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31690831
Default Alt Text
D37799.id115547.diff (27 KB)
Attached To
Mode
D37799: Mechanically convert if_vtnet(4) to DrvAPI
Attached
Detach File
Event Timeline
Log In to Comment