Add skeleton for TKM keymat variant
[strongswan.git] / src / charon-tkm / src / charon-tkm.c
index 8731d78..e102b4e 100644 (file)
 #include <library.h>
 #include <utils/backtrace.h>
 #include <threading/thread.h>
+#include <sa/keymat.h>
 
-#include <tkm/client.h>
+#include "tkm.h"
+#include "tkm_nonceg.h"
+#include "tkm_diffie_hellman.h"
+#include "tkm_keymat.h"
 
 /**
  * PID file, in which charon-tkm stores its process id
@@ -267,6 +271,20 @@ int main(int argc, char *argv[])
 
        DBG1(DBG_DMN, "Starting charon with TKM backend (strongSwan "VERSION")");
 
+       /* register TKM specific plugins */
+       static plugin_feature_t features[] = {
+               PLUGIN_REGISTER(NONCE_GEN, tkm_nonceg_create),
+                       PLUGIN_PROVIDE(NONCE_GEN),
+               PLUGIN_REGISTER(DH, tkm_diffie_hellman_create),
+                       PLUGIN_PROVIDE(DH, MODP_3072_BIT),
+                       PLUGIN_PROVIDE(DH, MODP_4096_BIT),
+       };
+       lib->plugins->add_static_features(lib->plugins, "tkm-backend", features,
+                       countof(features), TRUE);
+
+       /* register TKM keymat variant */
+       keymat_register_constructor(IKEV2, (keymat_constructor_t)tkm_keymat_create);
+
        /* initialize daemon */
        if (!charon->initialize(charon, PLUGINS))
        {
@@ -294,8 +312,12 @@ int main(int argc, char *argv[])
                goto deinit;
        }
 
-       /* initialize TKM client lib */
-       tkmlib_init();
+       /* initialize TKM client */
+       if (!tkm_init())
+       {
+               DBG1(DBG_DMN, "init of TKM client failed - aborting %s", dmn_name);
+               goto deinit;
+       }
 
        /* add handler for SEGV and ILL,
         * INT and TERM are handled by sigwait() in run() */
@@ -320,11 +342,11 @@ int main(int argc, char *argv[])
 
        unlink_pidfile();
        status = 0;
-       tkmlib_final();
 
 deinit:
        libcharon_deinit();
        libhydra_deinit();
        library_deinit();
+       tkm_deinit();
        return status;
 }