aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-03-21 15:41:45 +0100
committerMartin Willi <martin@revosec.ch>2012-03-22 09:05:56 +0100
commit3de54af7ec3b1abc6c6fa8c214e00258d4e1999e (patch)
treee2b203531ccc6413de36452758d98af4bdcc1b3a /src
parent4f3cf61dfd02d90f04940885f12ca3a1bb845698 (diff)
downloadstrongswan-3de54af7ec3b1abc6c6fa8c214e00258d4e1999e.tar.bz2
strongswan-3de54af7ec3b1abc6c6fa8c214e00258d4e1999e.tar.xz
Define a special XFRM mark_t.value that dynamically uses the CHILD_SA reqid
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/sa/child_sa.c9
-rw-r--r--src/libhydra/kernel/kernel_ipsec.h5
2 files changed, 14 insertions, 0 deletions
diff --git a/src/libcharon/sa/child_sa.c b/src/libcharon/sa/child_sa.c
index 2130a5998..ee3733a33 100644
--- a/src/libcharon/sa/child_sa.c
+++ b/src/libcharon/sa/child_sa.c
@@ -1079,6 +1079,15 @@ child_sa_t * child_sa_create(host_t *me, host_t* other,
this->reqid = rekey ? rekey : ++reqid;
}
+ if (this->mark_in.value == MARK_REQID)
+ {
+ this->mark_in.value = this->reqid;
+ }
+ if (this->mark_out.value == MARK_REQID)
+ {
+ this->mark_out.value = this->reqid;
+ }
+
/* MIPv6 proxy transport mode sets SA endpoints to TS hosts */
if (config->get_mode(config) == MODE_TRANSPORT &&
config->use_proxy_mode(config))
diff --git a/src/libhydra/kernel/kernel_ipsec.h b/src/libhydra/kernel/kernel_ipsec.h
index 7af76a321..852f0560c 100644
--- a/src/libhydra/kernel/kernel_ipsec.h
+++ b/src/libhydra/kernel/kernel_ipsec.h
@@ -172,6 +172,11 @@ struct mark_t {
};
/**
+ * Special mark value that uses the reqid of the CHILD_SA as mark
+ */
+#define MARK_REQID (0xFFFFFFFF)
+
+/**
* Interface to the ipsec subsystem of the kernel.
*
* The kernel ipsec interface handles the communication with the kernel