]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Use static plugin features in charon-nm
authorTobias Brunner <tobias@strongswan.org>
Mon, 25 Jun 2012 16:58:53 +0000 (18:58 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 27 Jun 2012 09:31:16 +0000 (11:31 +0200)
src/charon-nm/charon-nm.c
src/charon-nm/nm/nm_backend.c
src/charon-nm/nm/nm_backend.h

index 2e781c08a8e44a00857cd3f298edb7485e5eb3fb..d847d1e83a819d57d6cc6c58f67a953e037d2e68 100644 (file)
@@ -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();
index 19d09593562566e6e3f05aa99553a5151cd247e2..f8ed23ef16ceaa9edea8432a8105f28e3de75e3d 100644 (file)
@@ -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
index bff9d4d6f85ddac1a362dc3eb8c81062f217338c..89dc536f6fa223f9439fe6a3eb6fd54936d57e80 100644 (file)
  *
  * @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_ @}*/