From: heitzenberger@astaro.com
To: netfilter-devel@vger.kernel.org
Cc: holger@eitzenberger.org
Subject: [ULOGD 08/15] Initial round to make plugins reconfigurable
Date: Sat, 02 Feb 2008 21:48:34 +0100 [thread overview]
Message-ID: <20080202205108.302231004@astaro.com> (raw)
In-Reply-To: 20080202204826.267107164@astaro.com
Hi,
Content-Disposition: inline; filename=ulogd-allow-plugins-to-be-reconfigurable.diff
In order to make ulogd fully reconfigurable without restarting this
patch does some introductory work letting plugins be able to be
flagged as reconfigurable.
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
Index: ulogd-netfilter/include/ulogd/ulogd.h
===================================================================
--- ulogd-netfilter.orig/include/ulogd/ulogd.h
+++ ulogd-netfilter/include/ulogd/ulogd.h
@@ -125,6 +125,10 @@ struct ulogd_keyset {
struct ulogd_pluginstance_stack;
struct ulogd_pluginstance;
+
+/* plugin flags */
+#define ULOGD_PF_RECONF 0x00000001
+
struct ulogd_plugin {
/* global list of plugins */
struct llist_head list;
@@ -135,6 +139,8 @@ struct ulogd_plugin {
/* ID for this plugin (dynamically assigned) */
unsigned int id;
+ unsigned flags;
+
struct ulogd_keyset input;
struct ulogd_keyset output;
Index: ulogd-netfilter/src/ulogd.c
===================================================================
--- ulogd-netfilter.orig/src/ulogd.c
+++ ulogd-netfilter/src/ulogd.c
@@ -218,6 +218,23 @@ int ulogd_wildcard_inputkeys(struct ulog
return 0;
}
+/*
+ ulogd_pluginstance_reset_cfg() - reset to default config
+*/
+int
+ulogd_pluginstance_reset_cfg(const struct ulogd_pluginstance *pi)
+{
+ size_t size;
+
+ assert(pi->plugin != NULL);
+
+ size = sizeof(struct config_keyset)
+ + pi->plugin->config_kset->num_ces * sizeof(struct config_entry);
+
+ memcpy(pi->config_kset, pi->plugin->config_kset, size);
+
+ return 0;
+}
/***********************************************************************
* PLUGIN MANAGEMENT
@@ -823,6 +840,69 @@ for_each_pluginstance(int (* cb)(struct
return sum;
}
+enum ReconfOp
+{
+ INVAL = 0,
+ STOP,
+ CONFIGURE,
+ START,
+};
+
+static int
+_do_reconf(struct ulogd_pluginstance *pi,
+ struct ulogd_pluginstance_stack *stack, void *arg)
+{
+ enum ReconfOp op = (unsigned)arg;
+ int ret = 0;
+
+ assert(pi != NULL);
+
+ if ((pi->plugin->flags & ULOGD_PF_RECONF) == 0)
+ return 0;
+
+ switch (op) {
+ case STOP:
+ ret = pi->plugin->stop(pi);
+ break;
+
+ case CONFIGURE:
+ ulogd_pluginstance_reset_cfg(pi);
+ ret = pi->plugin->configure(pi, stack);
+ break;
+
+ case START:
+ ret = pi->plugin->start(pi);
+ break;
+
+ default:
+ return -1;
+ }
+
+ if (ret < 0) {
+ ulogd_log(ULOGD_FATAL, "reconfiguring '%s' failed\n", pi->id);
+ return -1;
+ }
+
+ return 1;
+}
+
+static int
+reconfigure_plugins(void)
+{
+ ulogd_log(ULOGD_INFO, "reconfiguring plugins\n");
+
+ if (for_each_pluginstance(_do_reconf, (void *)STOP) < 0)
+ abort();
+
+ if (for_each_pluginstance(_do_reconf, (void *)CONFIGURE) < 0)
+ abort();
+
+ if (for_each_pluginstance(_do_reconf, (void *)START) < 0)
+ abort();
+
+ return 0;
+}
+
static int
_do_signal(struct ulogd_pluginstance *pi,
struct ulogd_pluginstance_stack *stack, void *arg)
@@ -845,6 +925,7 @@ sync_sig_handler(int signo)
switch (signo) {
case SIGHUP:
+ reconfigure_plugins();
break;
case SIGALRM:
--
next prev parent reply other threads:[~2008-02-02 20:51 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-02 20:48 [ULOGD 00/15] ulogd V2 improvements, round 2 heitzenberger
2008-02-02 20:48 ` [ULOGD 01/15] Add NACCT output plugin heitzenberger
2008-02-02 21:24 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 02/15] common.h: added heitzenberger
2008-02-02 21:30 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 03/15] Replace timer code by working version heitzenberger
2008-02-02 22:45 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 04/15] Add IFI list heitzenberger
2008-02-02 21:36 ` Pablo Neira Ayuso
2008-02-02 21:50 ` Holger Eitzenberger
2008-02-02 22:56 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 05/15] Add signalling subsystem heitzenberger
2008-02-19 19:38 ` Pablo Neira Ayuso
2008-02-20 8:43 ` Holger Eitzenberger
2008-02-20 12:20 ` Patrick McHardy
2008-02-20 12:23 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 06/15] Conffile cleanup, use common pr_debug() heitzenberger
2008-02-02 21:43 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 07/15] Renice to -1 on startup heitzenberger
2008-02-02 21:47 ` Pablo Neira Ayuso
2008-02-02 20:48 ` heitzenberger [this message]
2008-02-02 20:48 ` [ULOGD 09/15] llist: add llist_for_each_prev_safe() heitzenberger
2008-02-02 20:48 ` [ULOGD 10/15] Improve select performance heitzenberger
2008-02-19 19:58 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 11/15] Add set_sockbuf_len() heitzenberger
2008-02-19 19:57 ` Pablo Neira Ayuso
2008-02-02 20:48 ` [ULOGD 12/15] Introduce global state, skip some stacks during reconfiguration heitzenberger
2008-02-02 20:48 ` [ULOGD 13/15] llist: turn poisoning off by default heitzenberger
2008-02-02 20:48 ` [ULOGD 14/15] SQLITE3: port to ulogd 2.00, mostly a rewrite heitzenberger
2008-02-02 20:48 ` [ULOGD 15/15] NFCT: rework and let it scale heitzenberger
2008-02-02 22:52 ` [ULOGD 00/15] ulogd V2 improvements, round 2 Pablo Neira Ayuso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080202205108.302231004@astaro.com \
--to=heitzenberger@astaro.com \
--cc=holger@eitzenberger.org \
--cc=netfilter-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.