summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nhrpd/nhrp_interface.c6
-rw-r--r--nhrpd/nhrp_nhs.c15
-rw-r--r--nhrpd/vici.c4
3 files changed, 14 insertions, 11 deletions
diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c
index a328a91b1..9f531cf6b 100644
--- a/nhrpd/nhrp_interface.c
+++ b/nhrpd/nhrp_interface.c
@@ -464,15 +464,13 @@ void nhrp_interface_set_protection(struct interface *ifp, const char *profile,
{
struct nhrp_interface *nifp = ifp->info;
- if (nifp->ipsec_profile)
- {
+ if (nifp->ipsec_profile) {
vici_terminate_vc_by_profile_name(nifp->ipsec_profile);
free(nifp->ipsec_profile);
}
nifp->ipsec_profile = profile ? strdup(profile) : NULL;
- if (nifp->ipsec_fallback_profile)
- {
+ if (nifp->ipsec_fallback_profile) {
vici_terminate_vc_by_profile_name(nifp->ipsec_fallback_profile);
free(nifp->ipsec_fallback_profile);
}
diff --git a/nhrpd/nhrp_nhs.c b/nhrpd/nhrp_nhs.c
index 2a871ee08..de1bdbd16 100644
--- a/nhrpd/nhrp_nhs.c
+++ b/nhrpd/nhrp_nhs.c
@@ -116,12 +116,15 @@ static int nhrp_reg_timeout(struct thread *t)
}
r->timeout <<= 1;
- if (r->timeout > 64)
- {
- //Remove the ipsec connection if it is there, it can get re-established later
- if(r->peer && r->peer->vc && r->peer->vc->ike_uniqueid)
- {
- debugf(NHRP_DEBUG_COMMON, "Terminating IPSec Connection for %d\n", r->peer->vc->ike_uniqueid);
+ if (r->timeout > 64) {
+ /* If registration fails repeatedly, this may be because the
+ * IPSec connection is not working. Close the connection so it
+ * can be re-established correctly
+ */
+ if (r->peer && r->peer->vc && r->peer->vc->ike_uniqueid) {
+ debugf(NHRP_DEBUG_COMMON,
+ "Terminating IPSec Connection for %d\n",
+ r->peer->vc->ike_uniqueid);
vici_terminate_vc_by_ike_id(r->peer->vc->ike_uniqueid);
r->peer->vc->ike_uniqueid = 0;
}
diff --git a/nhrpd/vici.c b/nhrpd/vici.c
index cce3947ee..fc51fe236 100644
--- a/nhrpd/vici.c
+++ b/nhrpd/vici.c
@@ -525,6 +525,7 @@ void vici_terminate(void)
void vici_terminate_vc_by_profile_name(char *profile_name)
{
struct vici_conn *vici = &vici_connection;
+
vici_submit_request(vici, "terminate", VICI_KEY_VALUE, "ike",
strlen(profile_name), profile_name, VICI_END);
}
@@ -532,7 +533,8 @@ void vici_terminate_vc_by_profile_name(char *profile_name)
void vici_terminate_vc_by_ike_id(unsigned int ike_id)
{
struct vici_conn *vici = &vici_connection;
- char ike_id_str[10]={0};
+ char ike_id_str[10];
+
snprintf(ike_id_str, sizeof(ike_id_str), "%d", ike_id);
vici_submit_request(vici, "terminate", VICI_KEY_VALUE, "ike-id",
strlen(ike_id_str), ike_id_str, VICI_END);