summaryrefslogtreecommitdiffstats
path: root/sys/netpfil
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2012-10-16 13:37:54 +0000
committerglebius <glebius@FreeBSD.org>2012-10-16 13:37:54 +0000
commit05f24a6b77a43334f14f31cd33a4f3e34a418ea2 (patch)
tree0f54a9446bfe2083d3c0a3f744318b2be8a0db05 /sys/netpfil
parent745884b065065ffc8847d3ea463bf751ffcaf863 (diff)
downloadFreeBSD-src-05f24a6b77a43334f14f31cd33a4f3e34a418ea2.zip
FreeBSD-src-05f24a6b77a43334f14f31cd33a4f3e34a418ea2.tar.gz
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
Diffstat (limited to 'sys/netpfil')
-rw-r--r--sys/netpfil/ipfw/ip_fw_log.c18
-rw-r--r--sys/netpfil/pf/if_pflog.c12
-rw-r--r--sys/netpfil/pf/if_pfsync.c28
3 files changed, 28 insertions, 30 deletions
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
};
OpenPOWER on IntegriCloud