From 13876431d676ed00282a20b4c0af3b6767654d01 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 5 Oct 2010 16:49:20 +0200 Subject: [PATCH] Explicitly configure MOBIKE tasks to update the list of additional addresses. --- src/libcharon/sa/ike_sa.c | 1 + src/libcharon/sa/tasks/ike_mobike.c | 11 +++++++++-- src/libcharon/sa/tasks/ike_mobike.h | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/libcharon/sa/ike_sa.c b/src/libcharon/sa/ike_sa.c index 998095f5f..0df517ada 100644 --- a/src/libcharon/sa/ike_sa.c +++ b/src/libcharon/sa/ike_sa.c @@ -1740,6 +1740,7 @@ METHOD(ike_sa_t, roam, status_t, { DBG1(DBG_IKE, "sending address list update using MOBIKE"); mobike = ike_mobike_create(&this->public, TRUE); + mobike->addresses(mobike); this->task_manager->queue_task(this->task_manager, (task_t*)mobike); return this->task_manager->initiate(this->task_manager); } diff --git a/src/libcharon/sa/tasks/ike_mobike.c b/src/libcharon/sa/tasks/ike_mobike.c index 3b1fbb019..e63a4212c 100644 --- a/src/libcharon/sa/tasks/ike_mobike.c +++ b/src/libcharon/sa/tasks/ike_mobike.c @@ -540,6 +540,14 @@ METHOD(task_t, process_i, status_t, return NEED_MORE; } +METHOD(ike_mobike_t, addresses, void, + private_ike_mobike_t *this) +{ + this->address = TRUE; + this->ike_sa->set_pending_updates(this->ike_sa, + this->ike_sa->get_pending_updates(this->ike_sa) + 1); +} + METHOD(ike_mobike_t, roam, void, private_ike_mobike_t *this, bool address) { @@ -556,7 +564,6 @@ METHOD(ike_mobike_t, dpd, void, { this->natd = ike_natd_create(this->ike_sa, this->initiator); } - this->address = FALSE; this->ike_sa->set_pending_updates(this->ike_sa, this->ike_sa->get_pending_updates(this->ike_sa) + 1); } @@ -609,6 +616,7 @@ ike_mobike_t *ike_mobike_create(ike_sa_t *ike_sa, bool initiator) .migrate = _migrate, .destroy = _destroy, }, + .addresses = _addresses, .roam = _roam, .dpd = _dpd, .transmit = _transmit, @@ -616,7 +624,6 @@ ike_mobike_t *ike_mobike_create(ike_sa_t *ike_sa, bool initiator) }, .ike_sa = ike_sa, .initiator = initiator, - .address = TRUE, ); if (initiator) diff --git a/src/libcharon/sa/tasks/ike_mobike.h b/src/libcharon/sa/tasks/ike_mobike.h index 05b2224d1..16611939e 100644 --- a/src/libcharon/sa/tasks/ike_mobike.h +++ b/src/libcharon/sa/tasks/ike_mobike.h @@ -45,6 +45,11 @@ struct ike_mobike_t { */ task_t task; + /** + * Use the task to update the list of additional addresses. + */ + void (*addresses)(ike_mobike_t *this); + /** * Use the task to roam to other addresses. *