Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Apr 2015 15:42:15 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r282022 - projects/ifnet/sys/dev/virtio/network
Message-ID:  <201504261542.t3QFgFii000980@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Sun Apr 26 15:42:14 2015
New Revision: 282022
URL: https://svnweb.freebsd.org/changeset/base/282022

Log:
  Convert vtnet(4) to new ifmedia KPI.
  
  Sponsored by:	Netflix
  Sponsored by:	Nginx, Inc.

Modified:
  projects/ifnet/sys/dev/virtio/network/if_vtnet.c
  projects/ifnet/sys/dev/virtio/network/if_vtnetvar.h

Modified: projects/ifnet/sys/dev/virtio/network/if_vtnet.c
==============================================================================
--- projects/ifnet/sys/dev/virtio/network/if_vtnet.c	Sun Apr 26 15:40:58 2015	(r282021)
+++ projects/ifnet/sys/dev/virtio/network/if_vtnet.c	Sun Apr 26 15:42:14 2015	(r282022)
@@ -194,7 +194,7 @@ static void	vtnet_unregister_vlan(void *
 
 static int	vtnet_is_link_up(struct vtnet_softc *);
 static void	vtnet_update_link_status(struct vtnet_softc *);
-static int	vtnet_ifmedia_upd(if_t);
+static int	vtnet_ifmedia_upd(if_t, if_media_t);
 static void	vtnet_ifmedia_sts(if_t, struct ifmediareq *);
 static void	vtnet_get_hwaddr(struct vtnet_softc *);
 static void	vtnet_set_hwaddr(struct vtnet_softc *);
@@ -294,12 +294,16 @@ DRIVER_MODULE(vtnet, virtio_pci, vtnet_d
 MODULE_VERSION(vtnet, 1);
 MODULE_DEPEND(vtnet, virtio, 1, 1, 1);
 
+static if_media_t vtnet_mediae[] = { VTNET_MEDIATYPE, 0 };
+
 static struct ifdriver vtnet_ifdrv = {
 	.ifdrv_ops = {
 		.ifop_ioctl = vtnet_ioctl,
 		.ifop_get_counter = vtnet_get_counter,
 		.ifop_transmit = vtnet_txq_mq_start,
 		.ifop_qflush = vtnet_qflush,
+		.ifop_media_change = vtnet_ifmedia_upd,
+		.ifop_media_status = vtnet_ifmedia_sts,
 	},
 	.ifdrv_name = "vtnet",
 	.ifdrv_type = IFT_ETHER,
@@ -440,8 +444,6 @@ vtnet_detach(device_t dev)
 		sc->vtnet_vlan_detach = NULL;
 	}
 
-	ifmedia_removeall(&sc->vtnet_media);
-
 	vtnet_free_rxtx_queues(sc);
 	vtnet_free_rx_filters(sc);
 
@@ -891,6 +893,8 @@ vtnet_setup_interface(struct vtnet_softc
 		.ifat_baudrate = IF_Gbps(10), /* Approx. */
 		.ifat_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST,
 		.ifat_capabilities = IFCAP_JUMBO_MTU | IFCAP_VLAN_MTU,
+		.ifat_mediae = vtnet_mediae,
+		.ifat_media = VTNET_MEDIATYPE,
 	};
 	device_t dev;
 
@@ -960,11 +964,6 @@ vtnet_setup_interface(struct vtnet_softc
 	vtnet_set_rx_process_limit(sc);
 	vtnet_set_tx_intr_threshold(sc);
 
-	ifmedia_init(&sc->vtnet_media, IFM_IMASK, vtnet_ifmedia_upd,
-	    vtnet_ifmedia_sts);
-	ifmedia_add(&sc->vtnet_media, VTNET_MEDIATYPE, 0, NULL);
-	ifmedia_set(&sc->vtnet_media, VTNET_MEDIATYPE);
-
 	sc->vtnet_ifp = if_attach(&ifat);
 }
 
@@ -1055,11 +1054,6 @@ vtnet_ioctl(if_t ifp, u_long cmd, void *
 		VTNET_CORE_UNLOCK(sc);
 		break;
 
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->vtnet_media, cmd);
-		break;
-
 	case SIOCSIFCAP:
 		sc->vtnet_capenable = ifr->ifr_reqcap;
 		/* These Rx features require us to renegotiate. */
@@ -3350,15 +3344,10 @@ vtnet_update_link_status(struct vtnet_so
 }
 
 static int
-vtnet_ifmedia_upd(if_t ifp)
+vtnet_ifmedia_upd(if_t ifp, if_media_t media)
 {
-	struct vtnet_softc *sc;
-	struct ifmedia *ifm;
-
-	sc = if_getsoftc(ifp, IF_DRIVER_SOFTC);
-	ifm = &sc->vtnet_media;
 
-	if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER)
+	if (IFM_TYPE(media) != IFM_ETHER)
 		return (EINVAL);
 
 	return (0);

Modified: projects/ifnet/sys/dev/virtio/network/if_vtnetvar.h
==============================================================================
--- projects/ifnet/sys/dev/virtio/network/if_vtnetvar.h	Sun Apr 26 15:40:58 2015	(r282021)
+++ projects/ifnet/sys/dev/virtio/network/if_vtnetvar.h	Sun Apr 26 15:42:14 2015	(r282022)
@@ -166,7 +166,6 @@ struct vtnet_softc {
 	uint64_t		 vtnet_features;
 	struct vtnet_statistics	 vtnet_stats;
 	struct callout		 vtnet_tick_ch;
-	struct ifmedia		 vtnet_media;
 	eventhandler_tag	 vtnet_vlan_attach;
 	eventhandler_tag	 vtnet_vlan_detach;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504261542.t3QFgFii000980>