starter: Use kernel interfaces to flush SAD and SPD.
authorTobias Brunner <tobias@strongswan.org>
Fri, 21 Oct 2011 12:14:36 +0000 (14:14 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 21 Oct 2011 12:24:34 +0000 (14:24 +0200)
This now supports platforms where neither 'ip xfrm' nor 'setkey' are
available (like Android).

configure.in
src/starter/Makefile.am
src/starter/netkey.c
src/starter/starter.c

index abde287..75e7244 100644 (file)
@@ -807,10 +807,10 @@ ADD_PLUGIN([xauth],                [p pluto])
 ADD_PLUGIN([attr],                 [h libcharon pluto])
 ADD_PLUGIN([attr-sql],             [h libcharon pluto])
 ADD_PLUGIN([load-tester],          [c libcharon])
-ADD_PLUGIN([kernel-pfkey],         [h libcharon pluto])
-ADD_PLUGIN([kernel-pfroute],       [h libcharon pluto])
-ADD_PLUGIN([kernel-klips],         [h libcharon pluto])
-ADD_PLUGIN([kernel-netlink],       [h libcharon pluto])
+ADD_PLUGIN([kernel-pfkey],         [h libcharon pluto starter])
+ADD_PLUGIN([kernel-pfroute],       [h libcharon pluto starter])
+ADD_PLUGIN([kernel-klips],         [h libcharon pluto starter])
+ADD_PLUGIN([kernel-netlink],       [h libcharon pluto starter])
 ADD_PLUGIN([resolve],              [h libcharon pluto])
 ADD_PLUGIN([socket-default],       [c libcharon])
 ADD_PLUGIN([socket-raw],           [c libcharon])
index c512898..ba97c06 100644 (file)
@@ -27,7 +27,7 @@ AM_CFLAGS = \
 
 AM_YFLAGS = -v -d
 
-starter_LDADD = defs.o $(top_builddir)/src/libfreeswan/libfreeswan.a $(top_builddir)/src/libstrongswan/libstrongswan.la $(SOCKLIB)
+starter_LDADD = defs.o $(top_builddir)/src/libfreeswan/libfreeswan.a $(top_builddir)/src/libstrongswan/libstrongswan.la $(top_builddir)/src/libhydra/libhydra.la $(SOCKLIB)
 EXTRA_DIST = keywords.txt ipsec.conf
 MAINTAINERCLEANFILES = keywords.c
 BUILT_SOURCES = parser.h
index e0449f0..6646195 100644 (file)
@@ -17,6 +17,7 @@
 #include <stdlib.h>
 
 #include <freeswan.h>
+#include <hydra.h>
 
 #include "../pluto/constants.h"
 #include "../pluto/defs.h"
@@ -66,18 +67,6 @@ starter_netkey_init(void)
 void
 starter_netkey_cleanup(void)
 {
-       if (system("ip xfrm state > /dev/null 2>&1") == 0)
-       {
-               ignore_result(system("ip xfrm state flush"));
-               ignore_result(system("ip xfrm policy flush"));
-       }
-       else if (system("type setkey > /dev/null 2>&1") == 0)
-       {
-               ignore_result(system("setkey -F"));
-               ignore_result(system("setkey -FP"));
-       }
-       else
-       {
-               plog("WARNING: cannot flush IPsec state/policy database");
-       }
+       hydra->kernel_interface->flush_sas(hydra->kernel_interface);
+       hydra->kernel_interface->flush_policies(hydra->kernel_interface);
 }
index db3ca43..44e2143 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <freeswan.h>
 #include <library.h>
+#include <hydra.h>
 
 #include "../pluto/constants.h"
 #include "../pluto/defs.h"
@@ -281,6 +282,9 @@ int main (int argc, char **argv)
        library_init(NULL);
        atexit(library_deinit);
 
+       libhydra_init("starter");
+       atexit(libhydra_deinit);
+
        /* parse command line */
        for (i = 1; i < argc; i++)
        {