diff options
author | Martin Willi <martin@strongswan.org> | 2007-09-12 07:36:45 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2007-09-12 07:36:45 +0000 |
commit | a8827c9b631e7ba58d7ddf1000a73b5894bf0d23 (patch) | |
tree | 1b8da8a18a05606f06a3e12a4229684a84193d7c /src | |
parent | 12fa4387c6f1c3a3d10b4922c1e5e1f172d71af0 (diff) | |
download | strongswan-a8827c9b631e7ba58d7ddf1000a73b5894bf0d23.tar.bz2 strongswan-a8827c9b631e7ba58d7ddf1000a73b5894bf0d23.tar.xz |
moving virtual IP when interface changes due mobike
Diffstat (limited to 'src')
-rw-r--r-- | src/charon/sa/tasks/ike_mobike.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/charon/sa/tasks/ike_mobike.c b/src/charon/sa/tasks/ike_mobike.c index 9ed32cdc9..aee75fbdb 100644 --- a/src/charon/sa/tasks/ike_mobike.c +++ b/src/charon/sa/tasks/ike_mobike.c @@ -217,6 +217,17 @@ static void update_children(private_ike_mobike_t *this) { iterator_t *iterator; child_sa_t *child_sa; + host_t *ip; + + /* additionally, we reinstall the virtual IP as we may have changed + * our interface */ + ip = this->ike_sa->get_virtual_ip(this->ike_sa, TRUE); + if (ip) + { + ip = ip->clone(ip); + this->ike_sa->set_virtual_ip(this->ike_sa, TRUE, ip); + ip->destroy(ip); + } iterator = this->ike_sa->create_child_sa_iterator(this->ike_sa); while (iterator->iterate(iterator, (void**)&child_sa)) |