Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net/npf Split the npflog cloner and auto-load the extens...



details:   https://anonhg.NetBSD.org/src/rev/70169c3e51af
branches:  trunk
changeset: 785357:70169c3e51af
user:      christos <christos%NetBSD.org@localhost>
date:      Sun Mar 10 20:51:44 2013 +0000

description:
Split the npflog cloner and auto-load the extensions.

diffstat:

 sys/net/npf/files.npf     |    5 +-
 sys/net/npf/if_npflog.c   |  169 ++++++++++++++++++++++++++++++++++++++++++++++
 sys/net/npf/npf_ext_log.c |  103 +---------------------------
 sys/net/npf/npf_rproc.c   |   17 ++++-
 4 files changed, 191 insertions(+), 103 deletions(-)

diffs (truncated from 384 to 300 lines):

diff -r 0dc6563249f3 -r 70169c3e51af sys/net/npf/files.npf
--- a/sys/net/npf/files.npf     Sun Mar 10 19:46:12 2013 +0000
+++ b/sys/net/npf/files.npf     Sun Mar 10 20:51:44 2013 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.npf,v 1.10 2013/02/09 03:35:31 rmind Exp $
+# $NetBSD: files.npf,v 1.11 2013/03/10 20:51:44 christos Exp $
 #
 # Public Domain.
 #
@@ -36,3 +36,6 @@
 
 # ALGs
 file   net/npf/npf_alg_icmp.c                  npf
+
+# Interfaces
+file   net/npf/if_npflog.c                     npf
diff -r 0dc6563249f3 -r 70169c3e51af sys/net/npf/if_npflog.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/net/npf/if_npflog.c   Sun Mar 10 20:51:44 2013 +0000
@@ -0,0 +1,169 @@
+/*     $NetBSD: if_npflog.c,v 1.1 2013/03/10 20:51:44 christos Exp $   */
+
+/*-
+ * Copyright (c) 2010-2012 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This material is based upon work partially supported by The
+ * NetBSD Foundation under a contract with Mindaugas Rasiukevicius.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * NPF logging extension.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: if_npflog.c,v 1.1 2013/03/10 20:51:44 christos Exp $");
+
+#include <sys/types.h>
+#include <sys/module.h>
+
+#include <sys/conf.h>
+#include <sys/kmem.h>
+#include <sys/mbuf.h>
+#include <sys/mutex.h>
+#include <sys/queue.h>
+#include <sys/sockio.h>
+
+#include <net/if.h>
+#include <net/if_types.h>
+#include <net/bpf.h>
+
+MODULE(MODULE_CLASS_DRIVER, if_npflog, NULL);
+
+typedef struct npflog_softc {
+       LIST_ENTRY(npflog_softc)        sc_entry;
+       kmutex_t                        sc_lock;
+       ifnet_t                         sc_if;
+       int                             sc_unit;
+} npflog_softc_t;
+
+static int     npflog_clone_create(struct if_clone *, int);
+static int     npflog_clone_destroy(ifnet_t *);
+
+static LIST_HEAD(, npflog_softc)       npflog_if_list  __cacheline_aligned;
+static struct if_clone                 npflog_cloner =
+    IF_CLONE_INITIALIZER("npflog", npflog_clone_create, npflog_clone_destroy);
+
+static void
+npflogattach(int nunits)
+{
+
+       LIST_INIT(&npflog_if_list);
+       if_clone_attach(&npflog_cloner);
+}
+
+static void
+npflogdetach(void)
+{
+       npflog_softc_t *sc;
+
+       while ((sc = LIST_FIRST(&npflog_if_list)) != NULL) {
+               npflog_clone_destroy(&sc->sc_if);
+       }
+       if_clone_detach(&npflog_cloner);
+}
+
+static int
+npflog_ioctl(ifnet_t *ifp, u_long cmd, void *data)
+{
+       npflog_softc_t *sc = ifp->if_softc;
+       int error = 0;
+
+       mutex_enter(&sc->sc_lock);
+       switch (cmd) {
+       case SIOCINITIFADDR:
+               ifp->if_flags |= (IFF_UP | IFF_RUNNING);
+               break;
+       default:
+               error = ifioctl_common(ifp, cmd, data);
+               break;
+       }
+       mutex_exit(&sc->sc_lock);
+       return error;
+}
+
+static int
+npflog_clone_create(struct if_clone *ifc, int unit)
+{
+       npflog_softc_t *sc;
+       ifnet_t *ifp;
+
+       sc = kmem_zalloc(sizeof(npflog_softc_t), KM_SLEEP);
+       mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTNET);
+
+       ifp = &sc->sc_if;
+       ifp->if_softc = sc;
+
+       if_initname(ifp, "npflog", unit);
+       ifp->if_type = IFT_OTHER;
+       ifp->if_dlt = DLT_NULL;
+       ifp->if_ioctl = npflog_ioctl;
+
+       KERNEL_LOCK(1, NULL);
+       if_attach(ifp);
+       if_alloc_sadl(ifp);
+       bpf_attach(ifp, DLT_NULL, 0);
+       LIST_INSERT_HEAD(&npflog_if_list, sc, sc_entry);
+       KERNEL_UNLOCK_ONE(NULL);
+
+       return 0;
+}
+
+static int
+npflog_clone_destroy(ifnet_t *ifp)
+{
+       npflog_softc_t *sc = ifp->if_softc;
+
+       KERNEL_LOCK(1, NULL);
+       LIST_REMOVE(sc, sc_entry);
+       bpf_detach(ifp);
+       if_detach(ifp);
+       KERNEL_UNLOCK_ONE(NULL);
+
+       mutex_destroy(&sc->sc_lock);
+       kmem_free(sc, sizeof(npflog_softc_t));
+       return 0;
+}
+
+/*
+ * Module interface.
+ */
+static int
+if_npflog_modcmd(modcmd_t cmd, void *arg)
+{
+       switch (cmd) {
+       case MODULE_CMD_INIT:
+               npflogattach(1);
+               break;
+
+       case MODULE_CMD_FINI:
+               npflogdetach();
+               break;
+
+       default:
+               return ENOTTY;
+       }
+       return 0;
+}
diff -r 0dc6563249f3 -r 70169c3e51af sys/net/npf/npf_ext_log.c
--- a/sys/net/npf/npf_ext_log.c Sun Mar 10 19:46:12 2013 +0000
+++ b/sys/net/npf/npf_ext_log.c Sun Mar 10 20:51:44 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: npf_ext_log.c,v 1.2 2012/12/24 19:05:42 rmind Exp $    */
+/*     $NetBSD: npf_ext_log.c,v 1.3 2013/03/10 20:51:44 christos Exp $ */
 
 /*-
  * Copyright (c) 2010-2012 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_ext_log.c,v 1.2 2012/12/24 19:05:42 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_ext_log.c,v 1.3 2013/03/10 20:51:44 christos Exp $");
 
 #include <sys/types.h>
 #include <sys/module.h>
@@ -51,7 +51,7 @@
 
 #include "npf_impl.h"
 
-NPF_EXT_MODULE(npf_ext_log, "");
+NPF_EXT_MODULE(npf_ext_log, "if_npflog");
 
 #define        NPFEXT_LOG_VER          1
 
@@ -61,101 +61,6 @@
        unsigned int    if_idx;
 } npf_ext_log_t;
 
-typedef struct npflog_softc {
-       LIST_ENTRY(npflog_softc)        sc_entry;
-       kmutex_t                        sc_lock;
-       ifnet_t                         sc_if;
-       int                             sc_unit;
-} npflog_softc_t;
-
-static int     npflog_clone_create(struct if_clone *, int);
-static int     npflog_clone_destroy(ifnet_t *);
-
-static LIST_HEAD(, npflog_softc)       npflog_if_list  __cacheline_aligned;
-static struct if_clone                 npflog_cloner =
-    IF_CLONE_INITIALIZER("npflog", npflog_clone_create, npflog_clone_destroy);
-
-void
-npflogattach(int nunits)
-{
-
-       LIST_INIT(&npflog_if_list);
-       if_clone_attach(&npflog_cloner);
-}
-
-void
-npflogdetach(void)
-{
-       npflog_softc_t *sc;
-
-       while ((sc = LIST_FIRST(&npflog_if_list)) != NULL) {
-               npflog_clone_destroy(&sc->sc_if);
-       }
-       if_clone_detach(&npflog_cloner);
-}
-
-static int
-npflog_ioctl(ifnet_t *ifp, u_long cmd, void *data)
-{
-       npflog_softc_t *sc = ifp->if_softc;
-       int error = 0;
-
-       mutex_enter(&sc->sc_lock);
-       switch (cmd) {
-       case SIOCINITIFADDR:
-               ifp->if_flags |= (IFF_UP | IFF_RUNNING);
-               break;
-       default:
-               error = ifioctl_common(ifp, cmd, data);
-               break;
-       }
-       mutex_exit(&sc->sc_lock);
-       return error;
-}
-
-static int
-npflog_clone_create(struct if_clone *ifc, int unit)
-{
-       npflog_softc_t *sc;
-       ifnet_t *ifp;
-
-       sc = kmem_zalloc(sizeof(npflog_softc_t), KM_SLEEP);
-       mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SOFTNET);
-
-       ifp = &sc->sc_if;
-       ifp->if_softc = sc;
-
-       if_initname(ifp, "npflog", unit);
-       ifp->if_type = IFT_OTHER;
-       ifp->if_dlt = DLT_NULL;
-       ifp->if_ioctl = npflog_ioctl;
-
-       KERNEL_LOCK(1, NULL);
-       if_attach(ifp);
-       if_alloc_sadl(ifp);
-       bpf_attach(ifp, DLT_NULL, 0);
-       LIST_INSERT_HEAD(&npflog_if_list, sc, sc_entry);
-       KERNEL_UNLOCK_ONE(NULL);
-
-       return 0;
-}
-
-static int



Home | Main Index | Thread Index | Old Index