aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/charon/config/child_cfg.h14
-rw-r--r--src/charon/plugins/stroke/stroke_config.c8
-rw-r--r--src/starter/starterstroke.c4
-rw-r--r--src/stroke/stroke_msg.h4
4 files changed, 27 insertions, 3 deletions
diff --git a/src/charon/config/child_cfg.h b/src/charon/config/child_cfg.h
index 7bae8d9a6..ce6a23629 100644
--- a/src/charon/config/child_cfg.h
+++ b/src/charon/config/child_cfg.h
@@ -93,6 +93,16 @@ struct lifetime_cfg_t {
};
/**
+ * Helper macro to easily set all three values of a specified limit (time,
+ * bytes, packets).
+ */
+#define LIFETIME_CFG_SET(l, limit, life, rekey, jitter) do { \
+ (l)->life_##limit = (life); \
+ (l)->rekey_##limit = (rekey); \
+ (l)->jitter_##limit = (jitter); \
+} while(0)
+
+/**
* Create a new lifetime_cfg_t object.
*/
static inline lifetime_cfg_t* lifetime_cfg_create() {
@@ -108,9 +118,7 @@ static inline lifetime_cfg_t* lifetime_cfg_create_time(u_int64_t life,
u_int64_t rekey, u_int64_t jitter)
{
lifetime_cfg_t *this = lifetime_cfg_create();
- this->life_time = life;
- this->rekey_time = rekey;
- this->jitter_time = jitter;
+ LIFETIME_CFG_SET(this, time, life, rekey, jitter);
return this;
}
diff --git a/src/charon/plugins/stroke/stroke_config.c b/src/charon/plugins/stroke/stroke_config.c
index 5a4dfe264..c76fd1622 100644
--- a/src/charon/plugins/stroke/stroke_config.c
+++ b/src/charon/plugins/stroke/stroke_config.c
@@ -772,6 +772,14 @@ static child_cfg_t *build_child_cfg(private_stroke_config_t *this,
msg->add_conn.rekey.ipsec_lifetime,
msg->add_conn.rekey.ipsec_lifetime - msg->add_conn.rekey.margin,
msg->add_conn.rekey.margin * msg->add_conn.rekey.fuzz / 100);
+ LIFETIME_CFG_SET(lifetime, bytes,
+ msg->add_conn.rekey.life_bytes,
+ msg->add_conn.rekey.life_bytes - msg->add_conn.rekey.margin_bytes,
+ msg->add_conn.rekey.margin_bytes * msg->add_conn.rekey.fuzz / 100);
+ LIFETIME_CFG_SET(lifetime, packets,
+ msg->add_conn.rekey.life_packets,
+ msg->add_conn.rekey.life_packets - msg->add_conn.rekey.margin_packets,
+ msg->add_conn.rekey.margin_packets * msg->add_conn.rekey.fuzz / 100);
child_cfg = child_cfg_create(
msg->add_conn.name, lifetime,
diff --git a/src/starter/starterstroke.c b/src/starter/starterstroke.c
index 578c52ee1..96caff8cb 100644
--- a/src/starter/starterstroke.c
+++ b/src/starter/starterstroke.c
@@ -279,6 +279,10 @@ int starter_stroke_add_conn(starter_config_t *cfg, starter_conn_t *conn)
msg.add_conn.rekey.ipsec_lifetime = conn->sa_ipsec_life_seconds;
msg.add_conn.rekey.ike_lifetime = conn->sa_ike_life_seconds;
msg.add_conn.rekey.margin = conn->sa_rekey_margin;
+ msg.add_conn.rekey.life_bytes = conn->sa_ipsec_life_bytes;
+ msg.add_conn.rekey.margin_bytes = conn->sa_ipsec_margin_bytes;
+ msg.add_conn.rekey.life_packets = conn->sa_ipsec_life_packets;
+ msg.add_conn.rekey.margin_packets = conn->sa_ipsec_margin_packets;
msg.add_conn.rekey.tries = conn->sa_keying_tries;
msg.add_conn.rekey.fuzz = conn->sa_rekey_fuzz;
}
diff --git a/src/stroke/stroke_msg.h b/src/stroke/stroke_msg.h
index abf285a86..9c3041c38 100644
--- a/src/stroke/stroke_msg.h
+++ b/src/stroke/stroke_msg.h
@@ -237,6 +237,10 @@ struct stroke_msg_t {
time_t ipsec_lifetime;
time_t ike_lifetime;
time_t margin;
+ u_int64_t life_bytes;
+ u_int64_t margin_bytes;
+ u_int64_t life_packets;
+ u_int64_t margin_packets;
unsigned long tries;
unsigned long fuzz;
} rekey;