diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-06-25 18:58:53 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-06-27 11:31:16 +0200 |
commit | ec3b332bf830a759036d8566f054f563e9cfdb2b (patch) | |
tree | 9b669219f006d46b14d90cfeb8a61fd18400a720 /src/charon-nm | |
parent | 5def45b890e7a0f9d9b7fbcc360dfe7ca9826970 (diff) | |
download | strongswan-ec3b332bf830a759036d8566f054f563e9cfdb2b.tar.bz2 strongswan-ec3b332bf830a759036d8566f054f563e9cfdb2b.tar.xz |
Use static plugin features in charon-nm
Diffstat (limited to 'src/charon-nm')
-rw-r--r-- | src/charon-nm/charon-nm.c | 14 | ||||
-rw-r--r-- | src/charon-nm/nm/nm_backend.c | 38 | ||||
-rw-r--r-- | src/charon-nm/nm/nm_backend.h | 7 |
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_ @}*/ |