summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikeb <mikeb@openbsd.org>2012-06-26 11:09:10 +0000
committermikeb <mikeb@openbsd.org>2012-06-26 11:09:10 +0000
commit8d81c769fb4ad5c3912e9e1b0d40e77a2bc4bb2a (patch)
treeb73eb71eeea82e11b0568b068db073ff76f55886
parentclose SA when IKE_SA_INIT or IKE_AUTH exchanges fail; (diff)
downloadwireguard-openbsd-8d81c769fb4ad5c3912e9e1b0d40e77a2bc4bb2a.tar.xz
wireguard-openbsd-8d81c769fb4ad5c3912e9e1b0d40e77a2bc4bb2a.zip
improve ikev2_msg_retransmit_timeout
-rw-r--r--sbin/iked/ikev2_msg.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/sbin/iked/ikev2_msg.c b/sbin/iked/ikev2_msg.c
index c70c4a53b36..622c6b2241b 100644
--- a/sbin/iked/ikev2_msg.c
+++ b/sbin/iked/ikev2_msg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ikev2_msg.c,v 1.17 2012/06/26 11:00:28 mikeb Exp $ */
+/* $OpenBSD: ikev2_msg.c,v 1.18 2012/06/26 11:09:10 mikeb Exp $ */
/* $vantronix: ikev2.c,v 1.101 2010/06/03 07:57:33 reyk Exp $ */
/*
@@ -964,19 +964,21 @@ ikev2_msg_retransmit_timeout(struct iked *env, void *arg)
struct iked_message *msg = arg;
struct iked_sa *sa = msg->msg_sa;
- if ((sendto(msg->msg_fd, ibuf_data(msg->msg_data),
- ibuf_size(msg->msg_data), 0,
- (struct sockaddr *)&msg->msg_peer, msg->msg_peerlen)) == -1) {
- log_warn("%s: sendto", __func__);
- sa_free(env, sa);
- return;
- }
-
if (msg->msg_tries < IKED_RETRANSMIT_TRIES) {
+ if ((sendto(msg->msg_fd, ibuf_data(msg->msg_data),
+ ibuf_size(msg->msg_data), 0,
+ (struct sockaddr *)&msg->msg_peer,
+ msg->msg_peerlen)) == -1) {
+ log_warn("%s: sendto", __func__);
+ sa_free(env, sa);
+ return;
+ }
TAILQ_INSERT_TAIL(&sa->sa_requests, msg, msg_entry);
/* Exponential timeout */
timer_register(env, &msg->msg_timer,
IKED_RETRANSMIT_TIMEOUT * (2 << (msg->msg_tries++)));
- } else
+ } else {
+ log_debug("%s: retransmit limit reached", __func__);
sa_free(env, sa);
+ }
}