aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-06-25 18:58:53 +0200
committerTobias Brunner <tobias@strongswan.org>2012-06-27 11:31:16 +0200
commitec3b332bf830a759036d8566f054f563e9cfdb2b (patch)
tree9b669219f006d46b14d90cfeb8a61fd18400a720
parent5def45b890e7a0f9d9b7fbcc360dfe7ca9826970 (diff)
downloadstrongswan-ec3b332bf830a759036d8566f054f563e9cfdb2b.tar.bz2
strongswan-ec3b332bf830a759036d8566f054f563e9cfdb2b.tar.xz
Use static plugin features in charon-nm
-rw-r--r--src/charon-nm/charon-nm.c14
-rw-r--r--src/charon-nm/nm/nm_backend.c38
-rw-r--r--src/charon-nm/nm/nm_backend.h7
3 files changed, 37 insertions, 22 deletions
diff --git a/src/charon-nm/charon-nm.c b/src/charon-nm/charon-nm.c
index 2e781c08a..d847d1e83 100644
--- a/src/charon-nm/charon-nm.c
+++ b/src/charon-nm/charon-nm.c
@@ -264,6 +264,9 @@ int main(int argc, char *argv[])
DBG1(DBG_DMN, "daemon 'charon-nm': passed file integrity test");
}
+ /* register NM backend to be loaded with plugins */
+ nm_backend_register();
+
/* initialize daemon */
if (!charon->initialize(charon,
lib->settings->get_str(lib->settings, "charon-nm.load", PLUGINS)))
@@ -272,17 +275,10 @@ int main(int argc, char *argv[])
goto deinit;
}
- /* load NM backend */
- if (!nm_backend_init())
- {
- DBG1(DBG_DMN, "failed to initialize NetworkManager backend - aborting charon-nm");
- goto deinit_nm;
- }
-
if (!drop_capabilities())
{
DBG1(DBG_DMN, "capability dropping failed - aborting charon-nm");
- goto deinit_nm;
+ goto deinit;
}
/* add handler for SEGV and ILL,
@@ -308,8 +304,6 @@ int main(int argc, char *argv[])
status = 0;
-deinit_nm:
- nm_backend_deinit();
deinit:
libcharon_deinit();
libhydra_deinit();
diff --git a/src/charon-nm/nm/nm_backend.c b/src/charon-nm/nm/nm_backend.c
index 19d095935..f8ed23ef1 100644
--- a/src/charon-nm/nm/nm_backend.c
+++ b/src/charon-nm/nm/nm_backend.c
@@ -83,10 +83,10 @@ static bool cancel(nm_backend_t *this)
return TRUE;
}
-/*
- * see header file
+/**
+ * Deinitialize NetworkManager backend
*/
-void nm_backend_deinit()
+static void nm_backend_deinit()
{
nm_backend_t *this = nm_backend;
@@ -107,10 +107,10 @@ void nm_backend_deinit()
nm_backend = NULL;
}
-/*
- * see header file
+/**
+ * Initialize NetworkManager backend
*/
-bool nm_backend_init()
+static bool nm_backend_init()
{
nm_backend_t *this;
@@ -145,3 +145,29 @@ bool nm_backend_init()
return TRUE;
}
+/**
+ * Initialize/deinitialize NetworkManager backend
+ */
+static bool nm_backend_cb(void *plugin,
+ plugin_feature_t *feature, bool reg, void *data)
+{
+ if (reg)
+ {
+ return nm_backend_init();
+ }
+ nm_backend_deinit();
+ return TRUE;
+}
+
+/*
+ * see header file
+ */
+void nm_backend_register()
+{
+ static plugin_feature_t features[] = {
+ PLUGIN_CALLBACK((plugin_feature_callback_t)nm_backend_cb, NULL),
+ PLUGIN_PROVIDE(CUSTOM, "NetworkManager backend"),
+ };
+ lib->plugins->add_static_features(lib->plugins, "nm-backend", features,
+ countof(features), TRUE);
+} \ No newline at end of file
diff --git a/src/charon-nm/nm/nm_backend.h b/src/charon-nm/nm/nm_backend.h
index bff9d4d6f..89dc536f6 100644
--- a/src/charon-nm/nm/nm_backend.h
+++ b/src/charon-nm/nm/nm_backend.h
@@ -31,11 +31,6 @@
*
* @return TRUE, if initialization was successful
*/
-bool nm_backend_init();
-
-/**
- * Deinitialize the NetworkManager backend.
- */
-void nm_backend_deinit();
+void nm_backend_register();
#endif /** NM_BACKEND_H_ @}*/