From 05f24a6b77a43334f14f31cd33a4f3e34a418ea2 Mon Sep 17 00:00:00 2001 From: glebius Date: Tue, 16 Oct 2012 13:37:54 +0000 Subject: Make the "struct if_clone" opaque to users of the cloning API. Users now use function calls: if_clone_simple() if_clone_advanced() to initialize a cloner, instead of macros that initialize if_clone structure. Discussed with: brooks, bz, 1 year ago --- sys/netpfil/ipfw/ip_fw_log.c | 18 +++++++++--------- sys/netpfil/pf/if_pflog.c | 12 +++++++----- sys/netpfil/pf/if_pfsync.c | 28 ++++++++++++---------------- 3 files changed, 28 insertions(+), 30 deletions(-) (limited to 'sys/netpfil') diff --git a/sys/netpfil/ipfw/ip_fw_log.c b/sys/netpfil/ipfw/ip_fw_log.c index 3cbb5fa..c33e365 100644 --- a/sys/netpfil/ipfw/ip_fw_log.c +++ b/sys/netpfil/ipfw/ip_fw_log.c @@ -102,7 +102,7 @@ static struct rwlock log_if_lock; #define LOGIF_WLOCK(x) rw_wlock(&log_if_lock) #define LOGIF_WUNLOCK(x) rw_wunlock(&log_if_lock) -#define IPFWNAME "ipfw" +static const char ipfwname[] = "ipfw"; /* we use this dummy function for all ifnet callbacks */ static int @@ -133,7 +133,7 @@ static int ipfw_log_clone_match(struct if_clone *ifc, const char *name) { - return (strncmp(name, IPFWNAME, sizeof(IPFWNAME) - 1) == 0); + return (strncmp(name, ipfwname, sizeof(ipfwname) - 1) == 0); } static int @@ -157,9 +157,9 @@ ipfw_log_clone_create(struct if_clone *ifc, char *name, size_t len, ifc_free_unit(ifc, unit); return (ENOSPC); } - ifp->if_dname = IPFWNAME; + ifp->if_dname = ipfwname; ifp->if_dunit = unit; - snprintf(ifp->if_xname, IFNAMSIZ, "%s%d", IPFWNAME, unit); + snprintf(ifp->if_xname, IFNAMSIZ, "%s%d", ipfwname, unit); strlcpy(name, ifp->if_xname, len); ifp->if_mtu = 65536; ifp->if_flags = IFF_UP | IFF_SIMPLEX | IFF_MULTICAST; @@ -214,9 +214,7 @@ ipfw_log_clone_destroy(struct if_clone *ifc, struct ifnet *ifp) return (0); } -static struct if_clone ipfw_log_cloner = IFC_CLONE_INITIALIZER( - IPFWNAME, NULL, IF_MAXUNIT, - NULL, ipfw_log_clone_match, ipfw_log_clone_create, ipfw_log_clone_destroy); +static struct if_clone *ipfw_log_cloner; void ipfw_log_bpf(int onoff) @@ -224,9 +222,11 @@ ipfw_log_bpf(int onoff) if (onoff) { LOGIF_LOCK_INIT(); - if_clone_attach(&ipfw_log_cloner); + ipfw_log_cloner = if_clone_advanced(ipfwname, 0, + ipfw_log_clone_match, ipfw_log_clone_create, + ipfw_log_clone_destroy); } else { - if_clone_detach(&ipfw_log_cloner); + if_clone_detach(ipfw_log_cloner); LOGIF_LOCK_DESTROY(); } } diff --git a/sys/netpfil/pf/if_pflog.c b/sys/netpfil/pf/if_pflog.c index 20feea2..4714543 100644 --- a/sys/netpfil/pf/if_pflog.c +++ b/sys/netpfil/pf/if_pflog.c @@ -88,8 +88,9 @@ static int pflogioctl(struct ifnet *, u_long, caddr_t); static void pflogstart(struct ifnet *); static int pflog_clone_create(struct if_clone *, int, caddr_t); static void pflog_clone_destroy(struct ifnet *); +static struct if_clone *pflog_cloner; -IFC_SIMPLE_DECLARE(pflog, 1); +static const char pflogname[] = "pflog"; struct ifnet *pflogifs[PFLOGIFS_MAX]; /* for fast access */ @@ -99,7 +100,8 @@ pflogattach(int npflog) int i; for (i = 0; i < PFLOGIFS_MAX; i++) pflogifs[i] = NULL; - if_clone_attach(&pflog_cloner); + pflog_cloner = if_clone_simple(pflogname, pflog_clone_create, + pflog_clone_destroy, 1); } static int @@ -114,7 +116,7 @@ pflog_clone_create(struct if_clone *ifc, int unit, caddr_t param) if (ifp == NULL) { return (ENOSPC); } - if_initname(ifp, ifc->ifc_name, unit); + if_initname(ifp, pflogname, unit); ifp->if_mtu = PFLOGMTU; ifp->if_ioctl = pflogioctl; ifp->if_output = pflogoutput; @@ -271,7 +273,7 @@ pflog_modevent(module_t mod, int type, void *data) PF_RULES_WLOCK(); pflog_packet_ptr = NULL; PF_RULES_WUNLOCK(); - if_clone_detach(&pflog_cloner); + if_clone_detach(pflog_cloner); break; default: error = EINVAL; @@ -281,7 +283,7 @@ pflog_modevent(module_t mod, int type, void *data) return error; } -static moduledata_t pflog_mod = { "pflog", pflog_modevent, 0 }; +static moduledata_t pflog_mod = { pflogname, pflog_modevent, 0 }; #define PFLOG_MODVER 1 diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c index 505d9a7..53333f8 100644 --- a/sys/netpfil/pf/if_pfsync.c +++ b/sys/netpfil/pf/if_pfsync.c @@ -220,7 +220,8 @@ struct pfsync_softc { #define PFSYNC_BUNLOCK(sc) mtx_unlock(&(sc)->sc_bulk_mtx) #define PFSYNC_BLOCK_ASSERT(sc) mtx_assert(&(sc)->sc_bulk_mtx, MA_OWNED) -static MALLOC_DEFINE(M_PFSYNC, "pfsync", "pfsync(4) data"); +static const char pfsyncname[] = "pfsync"; +static MALLOC_DEFINE(M_PFSYNC, pfsyncname, "pfsync(4) data"); static VNET_DEFINE(struct pfsync_softc *, pfsyncif) = NULL; #define V_pfsyncif VNET(pfsyncif) static VNET_DEFINE(void *, pfsync_swi_cookie) = NULL; @@ -279,11 +280,8 @@ static void pfsync_update_net_tdb(struct pfsync_tdb *); #define PFSYNC_MAX_BULKTRIES 12 -VNET_DEFINE(struct ifc_simple_data, pfsync_cloner_data); -VNET_DEFINE(struct if_clone, pfsync_cloner); -#define V_pfsync_cloner_data VNET(pfsync_cloner_data) -#define V_pfsync_cloner VNET(pfsync_cloner) -IFC_SIMPLE_DECLARE(pfsync, 1); +VNET_DEFINE(struct if_clone *, pfsync_cloner); +#define V_pfsync_cloner VNET(pfsync_cloner) static int pfsync_clone_create(struct if_clone *ifc, int unit, caddr_t param) @@ -312,7 +310,7 @@ pfsync_clone_create(struct if_clone *ifc, int unit, caddr_t param) free(sc, M_PFSYNC); return (ENOSPC); } - if_initname(ifp, ifc->ifc_name, unit); + if_initname(ifp, pfsyncname, unit); ifp->if_softc = sc; ifp->if_ioctl = pfsyncioctl; ifp->if_output = pfsyncoutput; @@ -320,7 +318,7 @@ pfsync_clone_create(struct if_clone *ifc, int unit, caddr_t param) ifp->if_snd.ifq_maxlen = ifqmaxlen; ifp->if_hdrlen = sizeof(struct pfsync_header); ifp->if_mtu = ETHERMTU; - mtx_init(&sc->sc_mtx, "pfsync", NULL, MTX_DEF); + mtx_init(&sc->sc_mtx, pfsyncname, NULL, MTX_DEF); mtx_init(&sc->sc_bulk_mtx, "pfsync bulk", NULL, MTX_DEF); callout_init(&sc->sc_tmo, CALLOUT_MPSAFE); callout_init_mtx(&sc->sc_bulk_tmo, &sc->sc_bulk_mtx, 0); @@ -2313,11 +2311,9 @@ pfsync_init() VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - V_pfsync_cloner = pfsync_cloner; - V_pfsync_cloner_data = pfsync_cloner_data; - V_pfsync_cloner.ifc_data = &V_pfsync_cloner_data; - if_clone_attach(&V_pfsync_cloner); - error = swi_add(NULL, "pfsync", pfsyncintr, V_pfsyncif, + V_pfsync_cloner = if_clone_simple(pfsyncname, + pfsync_clone_create, pfsync_clone_destroy, 1); + error = swi_add(NULL, pfsyncname, pfsyncintr, V_pfsyncif, SWI_NET, INTR_MPSAFE, &V_pfsync_swi_cookie); CURVNET_RESTORE(); if (error) @@ -2345,7 +2341,7 @@ fail_locked: CURVNET_SET(vnet_iter); if (V_pfsync_swi_cookie) { swi_remove(V_pfsync_swi_cookie); - if_clone_detach(&V_pfsync_cloner); + if_clone_detach(V_pfsync_cloner); } CURVNET_RESTORE(); } @@ -2366,7 +2362,7 @@ pfsync_uninit() VNET_LIST_RLOCK(); VNET_FOREACH(vnet_iter) { CURVNET_SET(vnet_iter); - if_clone_detach(&V_pfsync_cloner); + if_clone_detach(V_pfsync_cloner); swi_remove(V_pfsync_swi_cookie); CURVNET_RESTORE(); } @@ -2400,7 +2396,7 @@ pfsync_modevent(module_t mod, int type, void *data) } static moduledata_t pfsync_mod = { - "pfsync", + pfsyncname, pfsync_modevent, 0 }; -- cgit v1.1