Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jun 2008 05:13:24 GMT
From:      Julian Elischer <julian@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 144332 for review
Message-ID:  <200806300513.m5U5DOXH088809@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144332

Change 144332 by julian@julian_trafmon1 on 2008/06/30 05:12:55

	revert IFC. we need this

Affected files ...

.. //depot/projects/vimage/src/sys/net/if_loop.c#21 edit

Differences ...

==== //depot/projects/vimage/src/sys/net/if_loop.c#21 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)if_loop.c	8.2 (Berkeley) 1/9/95
- * $FreeBSD: src/sys/net/if_loop.c,v 1.117 2008/06/29 13:17:01 ed Exp $
+ * $FreeBSD: src/sys/net/if_loop.c,v 1.116 2008/05/09 20:38:25 rwatson Exp $
  */
 
 /*
@@ -43,6 +43,7 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
+#include <sys/malloc.h>
 #include <sys/mbuf.h>
 #include <sys/module.h>
 #include <machine/bus.h>
@@ -91,6 +92,13 @@
 #define LOMTU	16384
 #endif
 
+#define LONAME	"lo"
+
+struct lo_softc {
+	struct	ifnet *sc_ifp;
+	LIST_ENTRY(lo_softc) sc_next;
+};
+
 int		loioctl(struct ifnet *, u_long, caddr_t);
 static void	lortrequest(int, struct rtentry *, struct rt_addrinfo *);
 int		looutput(struct ifnet *ifp, struct mbuf *m,
@@ -107,6 +115,8 @@
 static LIST_HEAD(lo_list, lo_softc) lo_list;
 #endif /* !VIMAGE */
 
+static MALLOC_DEFINE(M_LO, LONAME, "Loopback Interface");
+
 static struct mtx lo_mtx;
 
 IFC_SIMPLE_DECLARE(lo, 1);
@@ -114,18 +124,23 @@
 static void
 lo_clone_destroy(struct ifnet *ifp)
 {
+	struct lo_softc *sc;
 #ifdef INVARIANTS
 	INIT_VNET_NET(ifp->if_vnet);
 #endif
 	
+	sc = ifp->if_softc;
+
 	/* XXX: destroying lo0 will lead to panics. */
 	KASSERT(V_loif != ifp, ("%s: destroying lo0", __func__));
 
 	mtx_lock(&lo_mtx);
+	LIST_REMOVE(sc, sc_next);
 	mtx_unlock(&lo_mtx);
 	bpfdetach(ifp);
 	if_detach(ifp);
 	if_free(ifp);
+	free(sc, M_LO);
 }
 
 static int
@@ -133,10 +148,14 @@
 {
 	INIT_VNET_NET(curvnet);
 	struct ifnet *ifp;
+	struct lo_softc *sc;
 
-	ifp = if_alloc(IFT_LOOP);
-	if (ifp == NULL)
+	MALLOC(sc, struct lo_softc *, sizeof(*sc), M_LO, M_WAITOK | M_ZERO);
+	ifp = sc->sc_ifp = if_alloc(IFT_LOOP);
+	if (ifp == NULL) {
+		free(sc, M_LO);
 		return (ENOSPC);
+	}
 	if (V_loif == NULL)
 		V_loif = ifp;
 
@@ -146,6 +165,7 @@
 	ifp->if_ioctl = loioctl;
 	ifp->if_output = looutput;
 	ifp->if_snd.ifq_maxlen = ifqmaxlen;
+	ifp->if_softc = sc;
 	if_attach(ifp);
 	bpfattach(ifp, DLT_NULL, sizeof(u_int32_t));
 	mtx_lock(&lo_mtx);



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