summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2013-08-29 19:04:31 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2013-08-29 19:04:31 +0200
commit7f33ccb920df2c308aa3076522bea683c66cb83d (patch)
treedd84a6fa62c936583cc8e28daf89e0713b4dd1ea
parent620f1cd45f44eb2dc2d9dd16bdf6ba4512a1bd69 (diff)
downloadfastd-7f33ccb920df2c308aa3076522bea683c66cb83d.tar
fastd-7f33ccb920df2c308aa3076522bea683c66cb83d.zip
Don't initialize monotone timestamps with zero
The monotone timestamp is near zero on linux systems, confusing fastd.
-rw-r--r--src/fastd.c3
-rw-r--r--src/fastd.h2
-rw-r--r--src/peer.c8
-rw-r--r--src/protocol_ec25519_fhmqvc.c6
4 files changed, 14 insertions, 5 deletions
diff --git a/src/fastd.c b/src/fastd.c
index 7c702c1..6ce10fc 100644
--- a/src/fastd.c
+++ b/src/fastd.c
@@ -769,6 +769,9 @@ int main(int argc, char *argv[]) {
update_time(&ctx);
+ conf.long_ago = ctx.now;
+ conf.long_ago.tv_sec -= 86400; /* 24h in the past */
+
ctx.next_keepalives = ctx.now;
ctx.next_keepalives.tv_sec += conf.keepalive_interval;
diff --git a/src/fastd.h b/src/fastd.h
index 848a5d3..dcb35b4 100644
--- a/src/fastd.h
+++ b/src/fastd.h
@@ -162,6 +162,8 @@ struct fastd_peer_group {
};
struct fastd_config {
+ struct timespec long_ago;
+
fastd_loglevel_t log_stderr_level;
fastd_loglevel_t log_syslog_level;
char *log_syslog_ident;
diff --git a/src/peer.c b/src/peer.c
index a9c3415..5c30307 100644
--- a/src/peer.c
+++ b/src/peer.c
@@ -201,16 +201,16 @@ static void setup_peer(fastd_context_t *ctx, fastd_peer_t *peer) {
fastd_remote_t *remote;
for (remote = peer->remotes; remote; remote = remote->next) {
- remote->last_resolve = (struct timespec){0, 0};
- remote->last_resolve_return = (struct timespec){0, 0};
+ remote->last_resolve = ctx->conf->long_ago;
+ remote->last_resolve_return = ctx->conf->long_ago;
}
peer->next_remote = peer->remotes;
- peer->last_handshake = (struct timespec){0, 0};
+ peer->last_handshake = ctx->conf->long_ago;
peer->last_handshake_address.sa.sa_family = AF_UNSPEC;
- peer->last_handshake_response = (struct timespec){0, 0};
+ peer->last_handshake_response = ctx->conf->long_ago;
peer->last_handshake_response_address.sa.sa_family = AF_UNSPEC;
if (!peer->protocol_state)
diff --git a/src/protocol_ec25519_fhmqvc.c b/src/protocol_ec25519_fhmqvc.c
index bb75404..73fbc5e 100644
--- a/src/protocol_ec25519_fhmqvc.c
+++ b/src/protocol_ec25519_fhmqvc.c
@@ -240,8 +240,12 @@ static bool protocol_peer_check_temporary(fastd_context_t *ctx, fastd_peer_t *pe
}
static void init_protocol_state(fastd_context_t *ctx) {
- if (!ctx->protocol_state)
+ if (!ctx->protocol_state) {
ctx->protocol_state = calloc(1, sizeof(fastd_protocol_state_t));
+
+ ctx->protocol_state->prev_handshake_key.preferred_till = ctx->conf->long_ago;
+ ctx->protocol_state->handshake_key.preferred_till = ctx->conf->long_ago;
+ }
}
static void new_handshake_key(fastd_context_t *ctx, keypair_t *key) {