svn commit: r200278 - user/eri/pf45/head/sys/contrib/pf/net

Ermal Luçi eri at FreeBSD.org
Tue Dec 8 22:35:39 UTC 2009


Author: eri
Date: Tue Dec  8 22:35:39 2009
New Revision: 200278
URL: http://svn.freebsd.org/changeset/base/200278

Log:
  First pass at VIMAGE for pfsync(4).
  
  TODO: Set context in some other needed areas and 'virtualize' statistic.

Modified:
  user/eri/pf45/head/sys/contrib/pf/net/if_pfsync.c

Modified: user/eri/pf45/head/sys/contrib/pf/net/if_pfsync.c
==============================================================================
--- user/eri/pf45/head/sys/contrib/pf/net/if_pfsync.c	Tue Dec  8 22:28:55 2009	(r200277)
+++ user/eri/pf45/head/sys/contrib/pf/net/if_pfsync.c	Tue Dec  8 22:35:39 2009	(r200278)
@@ -251,6 +251,9 @@ struct pfsync_softc {
 
 	struct in_addr		 sc_sync_peer;
 	u_int8_t		 sc_maxupdates;
+#ifdef __FreeBSD__
+	int			 pfsync_sync_ok;
+#endif
 
 	struct ip		 sc_template;
 
@@ -295,9 +298,15 @@ struct pfsync_softc {
 
 };
 
+#ifndef __FreeBSD__
 struct pfsync_softc	*pfsyncif = NULL;
 struct pfsyncstats	 pfsyncstats;
+#endif
 #ifdef __FreeBSD__
+VNET_DEFINE(struct pfsync_softc	*, pfsyncif) = NULL;
+#define	V_pfsyncif	VNET(pfsyncif)
+VNET_DEFINE(struct pfsyncstats, pfsyncstats);
+#define	V_pfsyncstats	VNET(pfsyncstats)
 #ifdef notyet
 SYSCTL_DECL(_net_inet_pfsync);
 SYSCTL_STRUCT(_net_inet_pfsync, 0, stats, CTLFLAG_RW,
@@ -367,7 +376,9 @@ void	pfsync_ifdetach(void *, struct ifne
 #endif
 
 #define PFSYNC_MAX_BULKTRIES	12
+#ifndef __FreeBSD__
 int	pfsync_sync_ok;
+#endif
 
 #ifdef __FreeBSD__
 IFC_SIMPLE_DECLARE(pfsync, 1);
@@ -395,7 +406,9 @@ pfsync_clone_create(struct if_clone *ifc
 	if (unit != 0)
 		return (EINVAL);
 
+#ifndef __FreeBSD__
 	pfsync_sync_ok = 1;
+#endif
 
 	sc = malloc(sizeof(struct pfsync_softc), M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (sc == NULL)
@@ -405,6 +418,7 @@ pfsync_clone_create(struct if_clone *ifc
 		TAILQ_INIT(&sc->sc_qs[q]);
 
 #ifdef __FreeBSD__
+	sc->pfsync_sync_ok = 1;
 	sc->sc_pool = uma_zcreate("pfsync", PFSYNC_PLSIZE,
 			NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
 	if (sc->sc_pool == NULL) {
@@ -447,7 +461,11 @@ pfsync_clone_create(struct if_clone *ifc
 	if_initname(ifp, ifc->ifc_name, unit);
 
 	sc->sc_detachtag = EVENTHANDLER_REGISTER(ifnet_departure_event,
+#ifdef __FreeBSD__
+	    pfsync_ifdetach, V_pfsyncif, EVENTHANDLER_PRI_ANY);
+#else
 	    pfsync_ifdetach, pfsyncif, EVENTHANDLER_PRI_ANY);
+#endif
 	if (sc->sc_detachtag == NULL) {
 		if_free(ifp);
 		free(sc->sc_imo.imo_membership, M_DEVBUF);
@@ -495,7 +513,11 @@ pfsync_clone_create(struct if_clone *ifc
 #endif
 #endif
 
+#ifdef __FreeBSD__
+	V_pfsyncif = sc;
+#else
 	pfsyncif = sc;
+#endif
 
 	return (0);
 }
@@ -516,7 +538,11 @@ pfsync_clone_destroy(struct ifnet *ifp)
 	timeout_del(&sc->sc_tmo);
 #if NCARP > 0
 #ifdef notyet
+#ifdef __FreeBSD__
+	if (!sc->pfsync_sync_ok)
+#else
 	if (!pfsync_sync_ok)
+#endif
 		carp_group_demote_adj(&sc->sc_if, -1);
 #endif
 #endif
@@ -543,7 +569,11 @@ pfsync_clone_destroy(struct ifnet *ifp)
 #endif
 	free(sc, M_DEVBUF);
 
+#ifdef __FreeBSD__
+	V_pfsyncif = NULL;
+#else
 	pfsyncif = NULL;
+#endif
 
 #ifndef __FreeBSD__
 	return (0);
@@ -867,7 +897,11 @@ pfsync_input(struct mbuf *m, __unused in
 pfsync_input(struct mbuf *m, ...)
 #endif
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	struct pfsync_pkt pkt;
 	struct ip *ip = mtod(m, struct ip *);
 	struct pfsync_header *ph;
@@ -1528,7 +1562,11 @@ pfsync_in_del_c(struct pfsync_pkt *pkt, 
 int
 pfsync_in_bus(struct pfsync_pkt *pkt, struct mbuf *m, int offset, int count)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	struct pfsync_bus *bus;
 	struct mbuf *mp;
 	int len = count * sizeof(*bus);
@@ -1549,7 +1587,7 @@ pfsync_in_bus(struct pfsync_pkt *pkt, st
 	case PFSYNC_BUS_START:
 #ifdef __FreeBSD__
 		callout_reset(&sc->sc_bulkfail_tmo, 5 * hz, pfsync_bulk_fail,
-		    pfsyncif);
+		    V_pfsyncif);
 #else
 		timeout_add_sec(&sc->sc_bulkfail_tmo, 5); /* XXX magic */
 #endif
@@ -1574,11 +1612,19 @@ pfsync_in_bus(struct pfsync_pkt *pkt, st
 			timeout_del(&sc->sc_bulkfail_tmo);
 #if NCARP > 0
 #ifdef notyet
+#ifdef __FreeBSD__
+			if (!sc->pfsync_sync_ok)
+#else
 			if (!pfsync_sync_ok)
+#endif
 				carp_group_demote_adj(&sc->sc_if, -1);
 #endif
 #endif
+#ifdef __FreeBSD__
+			sc->pfsync_sync_ok = 1;
+#else
 			pfsync_sync_ok = 1;
+#endif
 #ifdef __FreeBSD__
 			if (V_pf_status.debug >= PF_DEBUG_MISC)
 #else
@@ -1914,11 +1960,19 @@ pfsyncioctl(struct ifnet *ifp, u_long cm
 			sc->sc_ureq_sent = time_uptime;
 #if NCARP > 0
 #ifdef notyet
+#ifdef __FreeBSD__
+			if (sc->pfsync_sync_ok)
+#else
 			if (pfsync_sync_ok)
+#endif
 				carp_group_demote_adj(&sc->sc_if, 1);
 #endif
 #endif
+#ifdef __FreeBSD__
+			sc->pfsync_sync_ok = 0;
+#else
 			pfsync_sync_ok = 0;
+#endif
 #ifdef __FreeBSD__
 			if (V_pf_status.debug >= PF_DEBUG_MISC)
 #else
@@ -1927,7 +1981,7 @@ pfsyncioctl(struct ifnet *ifp, u_long cm
 				printf("pfsync: requesting bulk update\n");
 #ifdef __FreeBSD__
                 	callout_reset(&sc->sc_bulkfail_tmo, 5 * hz,
-                    	    pfsync_bulk_fail, pfsyncif);
+                    	    pfsync_bulk_fail, V_pfsyncif);
 #else
 			timeout_add_sec(&sc->sc_bulkfail_tmo, 5);
 #endif
@@ -2055,7 +2109,11 @@ pfsync_drop(struct pfsync_softc *sc)
 void
 pfsync_sendout(void)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 #if NBPFILTER > 0
 #ifdef __FreeBSD__
 	struct ifnet *ifp = sc->sc_ifp;
@@ -2307,7 +2365,11 @@ pfsync_sendout(void)
 void
 pfsync_insert_state(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 #ifdef __FreeBSD__
         PF_ASSERT(MA_OWNED);
@@ -2336,7 +2398,7 @@ pfsync_insert_state(struct pf_state *st)
 	if (sc->sc_len == PFSYNC_MINPKT)
 #ifdef __FreeBSD__
                 callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout,
-                    pfsyncif);
+                    V_pfsyncif);
 #else
 		timeout_add_sec(&sc->sc_tmo, 1);
 #endif
@@ -2354,7 +2416,11 @@ int defer = 10;
 int
 pfsync_defer(struct pf_state *st, struct mbuf *m)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	struct pfsync_deferral *pd;
 
 #ifdef __FreeBSD__
@@ -2397,7 +2463,11 @@ pfsync_defer(struct pf_state *st, struct
 void
 pfsync_undefer(struct pfsync_deferral *pd, int drop)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	int s;
 
 #ifdef __FreeBSD__
@@ -2433,15 +2503,20 @@ pfsync_undefer(struct pfsync_deferral *p
 void
 pfsync_defer_tmo(void *arg)
 {
+#if defined(__FreeBSD__) && defined(VIMAGE)
+	struct pfsync_deferral *pd = arg;
+#endif
 	int s;
 
 	s = splsoftnet();
 #ifdef __FreeBSD__
+	CURVNET_SET(pd->pd_m->m_pkthdr.rcvif); /* XXX */
         PF_LOCK();
 #endif
 	pfsync_undefer(arg, 0);
 #ifdef __FreeBSD__
         PF_UNLOCK();
+	CURVNET_RESTORE();
 #endif
 	splx(s);
 }
@@ -2449,7 +2524,11 @@ pfsync_defer_tmo(void *arg)
 void
 pfsync_deferred(struct pf_state *st, int drop)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	struct pfsync_deferral *pd;
 
 	TAILQ_FOREACH(pd, &sc->sc_deferrals, pd_entry) {
@@ -2467,7 +2546,11 @@ u_int pfsync_upds = 0;
 void
 pfsync_update_state(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	int sync = 0;
 
 #ifdef __FreeBSD__
@@ -2490,7 +2573,7 @@ pfsync_update_state(struct pf_state *st)
 	if (sc->sc_len == PFSYNC_MINPKT)
 #ifdef __FreeBSD__
                 callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout,
-                    pfsyncif);
+                    V_pfsyncif);
 #else
 		timeout_add_sec(&sc->sc_tmo, 1);
 #endif
@@ -2527,7 +2610,11 @@ pfsync_update_state(struct pf_state *st)
 void
 pfsync_request_update(u_int32_t creatorid, u_int64_t id)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	struct pfsync_upd_req_item *item;
 	size_t nlen = sizeof(struct pfsync_upd_req);
 	int s;
@@ -2571,7 +2658,11 @@ pfsync_request_update(u_int32_t creatori
 void
 pfsync_update_state_req(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 	if (sc == NULL)
 		panic("pfsync_update_state_req: nonexistant instance");
@@ -2606,7 +2697,11 @@ pfsync_update_state_req(struct pf_state 
 void
 pfsync_delete_state(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 #ifdef __FreeBSD__
         PF_ASSERT(MA_OWNED);
@@ -2628,7 +2723,7 @@ pfsync_delete_state(struct pf_state *st)
 	if (sc->sc_len == PFSYNC_MINPKT)
 #ifdef __FreeBSD__
                 callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout,
-                    pfsyncif);
+                    V_pfsyncif);
 #else
 		timeout_add_sec(&sc->sc_tmo, 1);
 #endif
@@ -2663,7 +2758,11 @@ pfsync_clear_states(u_int32_t creatorid,
 		struct pfsync_clr clr;
 	} __packed r;
 
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 #ifdef __FreeBSD__
         PF_ASSERT(MA_OWNED);
@@ -2688,7 +2787,11 @@ pfsync_clear_states(u_int32_t creatorid,
 void
 pfsync_q_ins(struct pf_state *st, int q)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	size_t nlen = pfsync_qs[q].len;
 	int s;
 
@@ -2732,7 +2835,11 @@ pfsync_q_ins(struct pf_state *st, int q)
 void
 pfsync_q_del(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	int q = st->sync_state;
 
 #ifdef __FreeBSD__
@@ -2754,7 +2861,11 @@ pfsync_q_del(struct pf_state *st)
 void
 pfsync_update_tdb(struct tdb *t, int output)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	size_t nlen = sizeof(struct pfsync_tdb);
 	int s;
 
@@ -2792,7 +2903,11 @@ pfsync_update_tdb(struct tdb *t, int out
 void
 pfsync_delete_tdb(struct tdb *t)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 	if (sc == NULL || !ISSET(t->tdb_flags, TDBF_PFSYNC))
 		return;
@@ -2843,7 +2958,11 @@ pfsync_out_tdb(struct tdb *t, struct mbu
 void
 pfsync_bulk_start(void)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 	sc->sc_ureq_received = time_uptime;
 
@@ -2876,6 +2995,7 @@ pfsync_bulk_update(void *arg)
 
 	s = splsoftnet();
 #ifdef __FreeBSD__
+	CURVNET_SET(sc->sc_ifp->if_vnet);
         PF_LOCK();
 #endif
 	do {
@@ -2914,6 +3034,7 @@ pfsync_bulk_update(void *arg)
 out:
 #ifdef __FreeBSD__
         PF_UNLOCK();
+	CURVNET_RESTORE();
 #endif
 	splx(s);
 }
@@ -2926,7 +3047,11 @@ pfsync_bulk_status(u_int8_t status)
 		struct pfsync_bus bus;
 	} __packed r;
 
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 	bzero(&r, sizeof(r));
 
@@ -2949,11 +3074,15 @@ pfsync_bulk_fail(void *arg)
 {
 	struct pfsync_softc *sc = arg;
 
+#ifdef __FreeBSD__
+	CURVNET_SET(sc->sc_ifp->if_vnet);
+#endif
+
 	if (sc->sc_bulk_tries++ < PFSYNC_MAX_BULKTRIES) {
 		/* Try again */
 #ifdef __FreeBSD__
                 callout_reset(&sc->sc_bulkfail_tmo, 5 * hz,
-                    pfsync_bulk_fail, pfsyncif);
+                    pfsync_bulk_fail, V_pfsyncif);
 #else
 		timeout_add_sec(&sc->sc_bulkfail_tmo, 5);
 #endif
@@ -2964,11 +3093,19 @@ pfsync_bulk_fail(void *arg)
 		sc->sc_bulk_tries = 0;
 #if NCARP > 0
 #ifdef notyet
+#ifdef __FreeBSD__
+		if (!sc->pfsync_sync_ok)
+#else
 		if (!pfsync_sync_ok)
+#endif
 			carp_group_demote_adj(&sc->sc_if, -1);
 #endif
 #endif
+#ifdef __FreeBSD__
+		sc->pfsync_sync_ok = 1;
+#else
 		pfsync_sync_ok = 1;
+#endif
 #ifdef __FreeBSD__
 		if (V_pf_status.debug >= PF_DEBUG_MISC)
 #else
@@ -2976,12 +3113,20 @@ pfsync_bulk_fail(void *arg)
 #endif
 			printf("pfsync: failed to receive bulk update\n");
 	}
+
+#ifdef __FreeBSD__
+	CURVNET_RESTORE();
+#endif
 }
 
 void
 pfsync_send_plus(void *plus, size_t pluslen)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 	int s;
 
 #ifdef __FreeBSD__
@@ -3017,7 +3162,11 @@ pfsync_send_plus(void *plus, size_t plus
 int
 pfsync_up(void)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 #ifdef __FreeBSD__
 	if (sc == NULL || !ISSET(sc->sc_ifp->if_flags, IFF_DRV_RUNNING))
@@ -3032,7 +3181,11 @@ pfsync_up(void)
 int
 pfsync_state_in_use(struct pf_state *st)
 {
+#ifdef __FreeBSD__
+	struct pfsync_softc *sc = V_pfsyncif;
+#else
 	struct pfsync_softc *sc = pfsyncif;
+#endif
 
 	if (sc == NULL)
 		return (0);
@@ -3052,8 +3205,15 @@ u_int pfsync_tmos;
 void
 pfsync_timeout(void *arg)
 {
+#if defined(__FreeBSD__) && defined(VIMAGE)
+	struct pfsync_softc *sc = arg;
+#endif
 	int s;
 
+#ifdef __FreeBSD__
+	CURVNET_SET(sc->sc_ifp->if_vnet);
+#endif
+
 	pfsync_tmos++;
 
 	s = splnet();
@@ -3065,18 +3225,31 @@ pfsync_timeout(void *arg)
         PF_UNLOCK();
 #endif
 	splx(s);
+
+#ifdef __FreeBSD__
+	CURVNET_RESTORE();
+#endif
 }
 
 /* this is a softnet/netisr handler */
 void
 #ifdef __FreeBSD__
-pfsyncintr(void *unused)
+pfsyncintr(void *arg)
 #else
 pfsyncintr(void)
 #endif
 {
+#ifdef __FreeBSD__
+        struct pfsync_softc *sc = arg;
+#endif
 	int s;
 
+#ifdef __FreeBSD__
+	if (sc == NULL)
+		return;
+
+        CURVNET_SET(sc->sc_ifp->if_vnet);
+#endif
 	pfsync_ints++;
 
 	s = splnet();
@@ -3088,6 +3261,10 @@ pfsyncintr(void)
         PF_UNLOCK();
 #endif
 	splx(s);
+
+#ifdef __FreeBSD__
+        CURVNET_RESTORE();
+#endif
 }
 
 #ifdef notyet
@@ -3121,6 +3298,8 @@ pfsync_ifdetach(void *arg, struct ifnet 
 	if (sc == NULL || sc->sc_sync_if != ifp)
 		return;         /* not for us; unlocked read */
 
+	CURVNET_SET(sc->sc_ifp->if_vnet);
+
 	PF_LOCK();
 
 	/* Deal with a member interface going away from under us. */
@@ -3142,8 +3321,73 @@ pfsync_ifdetach(void *arg, struct ifnet 
 	}
 
 	PF_UNLOCK();
+	
+	CURVNET_RESTORE();
+}
+
+static int
+vnet_pfsync_init(const void *unused)
+{
+	int error = 0;
+
+	pfsyncattach(0);
+
+	error = swi_add(NULL, "pfsync", pfsyncintr, pfsyncif,
+		SWI_NET, INTR_MPSAFE, &pfsync_swi.pfsync_swi_cookie);
+	if (error)
+		panic("%s: swi_add %d", __func__, error);
+
+	pfsync_state_import_ptr = pfsync_state_import;
+        pfsync_up_ptr = pfsync_up;
+        pfsync_insert_state_ptr = pfsync_insert_state;
+        pfsync_update_state_ptr = pfsync_update_state;
+        pfsync_delete_state_ptr = pfsync_delete_state;
+        pfsync_clear_states_ptr = pfsync_clear_states;
+        pfsync_state_in_use_ptr = pfsync_state_in_use;
+        pfsync_defer_ptr = pfsync_defer;
+
+        return (0);
+}
+
+static int
+vnet_pfsync_uninit(const void *unused)
+{
+
+	swi_remove(pfsync_swi.pfsync_swi_cookie);
+
+	pfsync_state_import_ptr = NULL;
+	pfsync_up_ptr = NULL;
+	pfsync_insert_state_ptr = NULL;
+	pfsync_update_state_ptr = NULL;
+	pfsync_delete_state_ptr = NULL;
+	pfsync_clear_states_ptr = NULL;
+	pfsync_state_in_use_ptr = NULL;
+	pfsync_defer_ptr = NULL;
+
+	if_clone_detach(&pfsync_cloner);
+
+        return (0);
 }
 
+/* Define startup order. */
+#define PFSYNC_SYSINIT_ORDER      SI_SUB_PROTO_BEGIN
+#define PFSYNC_MODEVENT_ORDER     (SI_ORDER_FIRST) /* On boot slot in here. */
+#define PFSYNC_VNET_ORDER         (PFSYNC_MODEVENT_ORDER + 2) /* Later still. */
+
+/*
+ * Starting up.
+ * VNET_SYSINIT is called for each existing vnet and each new vnet.
+ */
+VNET_SYSINIT(vnet_pfsync_init, PFSYNC_SYSINIT_ORDER, PFSYNC_VNET_ORDER,
+           vnet_pfsync_init, NULL);
+
+/*
+ * Closing up shop. These are done in REVERSE ORDER,
+ * Not called on reboot.
+ * VNET_SYSUNINIT is called for each exiting vnet as it exits.
+ */
+VNET_SYSUNINIT(vnet_pfsync_uninit, PFSYNC_SYSINIT_ORDER, PFSYNC_VNET_ORDER,
+           vnet_pfsync_uninit, NULL);
 static int
 pfsync_modevent(module_t mod, int type, void *data)
 {
@@ -3151,37 +3395,14 @@ pfsync_modevent(module_t mod, int type, 
 
 	switch (type) {
 	case MOD_LOAD:
+#ifndef __FreeBSD__
 		pfsyncattach(0);
-#ifdef __FreeBSD__
-		error = swi_add(NULL, "pfsync", pfsyncintr, NULL,
-			    SWI_NET, INTR_MPSAFE, &pfsync_swi.pfsync_swi_cookie);
-		if (error)
- 			panic("%s: swi_add %d", __func__, error);
-		
-		pfsync_state_import_ptr = pfsync_state_import;
-		pfsync_up_ptr = pfsync_up;
-		pfsync_insert_state_ptr = pfsync_insert_state;
-		pfsync_update_state_ptr = pfsync_update_state;
-		pfsync_delete_state_ptr = pfsync_delete_state;
-		pfsync_clear_states_ptr = pfsync_clear_states;
-		pfsync_state_in_use_ptr = pfsync_state_in_use;
-		pfsync_defer_ptr = pfsync_defer;
 #endif
 		break;
 	case MOD_UNLOAD:
-#ifdef __FreeBSD__
-		swi_remove(pfsync_swi.pfsync_swi_cookie);
-		
-		pfsync_state_import_ptr = NULL;
-                pfsync_up_ptr = NULL;
-                pfsync_insert_state_ptr = NULL;
-                pfsync_update_state_ptr = NULL;
-                pfsync_delete_state_ptr = NULL;
-                pfsync_clear_states_ptr = NULL;
-		pfsync_state_in_use_ptr = NULL;
-		pfsync_defer_ptr = NULL;
-#endif
+#ifndef __FreeBSD__
 		if_clone_detach(&pfsync_cloner);
+#endif
 		break;
 	default:
 		error = EINVAL;


More information about the svn-src-user mailing list