From feb8550401c85218523c007f0d52a1c9bf006342 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 27 Aug 2012 14:09:47 +0200 Subject: Pass a list instead of a single virtual IP to attribute enumerators --- src/libcharon/plugins/dhcp/dhcp_provider.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/libcharon/plugins/dhcp/dhcp_provider.c') diff --git a/src/libcharon/plugins/dhcp/dhcp_provider.c b/src/libcharon/plugins/dhcp/dhcp_provider.c index a6a887780..705063493 100644 --- a/src/libcharon/plugins/dhcp/dhcp_provider.c +++ b/src/libcharon/plugins/dhcp/dhcp_provider.c @@ -130,17 +130,24 @@ METHOD(attribute_provider_t, release_address, bool, METHOD(attribute_provider_t, create_attribute_enumerator, enumerator_t*, private_dhcp_provider_t *this, char *pool, identification_t *id, - host_t *vip) + linked_list_t *vips) { - dhcp_transaction_t *transaction; + dhcp_transaction_t *transaction = NULL; + enumerator_t *enumerator; + host_t *vip; - if (!vip) + this->mutex->lock(this->mutex); + enumerator = vips->create_enumerator(vips); + while (enumerator->enumerate(enumerator, &vip)) { - return NULL; + transaction = this->transactions->get(this->transactions, + (void*)hash_id_host(id, vip)); + if (transaction) + { + break; + } } - this->mutex->lock(this->mutex); - transaction = this->transactions->get(this->transactions, - (void*)hash_id_host(id, vip)); + enumerator->destroy(enumerator); if (!transaction) { this->mutex->unlock(this->mutex); -- cgit v1.2.3 From d55fe264d1dd33a2751aa75a6f814e153f6354d4 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 27 Aug 2012 14:48:41 +0200 Subject: Pass all configured pool names to attribute provider enumerator --- src/libcharon/plugins/dhcp/dhcp_provider.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/libcharon/plugins/dhcp/dhcp_provider.c') diff --git a/src/libcharon/plugins/dhcp/dhcp_provider.c b/src/libcharon/plugins/dhcp/dhcp_provider.c index 705063493..3d72b4435 100644 --- a/src/libcharon/plugins/dhcp/dhcp_provider.c +++ b/src/libcharon/plugins/dhcp/dhcp_provider.c @@ -129,7 +129,7 @@ METHOD(attribute_provider_t, release_address, bool, } METHOD(attribute_provider_t, create_attribute_enumerator, enumerator_t*, - private_dhcp_provider_t *this, char *pool, identification_t *id, + private_dhcp_provider_t *this, linked_list_t *pools, identification_t *id, linked_list_t *vips) { dhcp_transaction_t *transaction = NULL; -- cgit v1.2.3 From 980c468cdcf5072415cb38ea59e05acc92bdcad5 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 27 Aug 2012 16:26:28 +0200 Subject: DHCP plugin returns virtual IPs for IPv4 requests only --- src/libcharon/plugins/dhcp/dhcp_provider.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/libcharon/plugins/dhcp/dhcp_provider.c') diff --git a/src/libcharon/plugins/dhcp/dhcp_provider.c b/src/libcharon/plugins/dhcp/dhcp_provider.c index 3d72b4435..e46cc4d90 100644 --- a/src/libcharon/plugins/dhcp/dhcp_provider.c +++ b/src/libcharon/plugins/dhcp/dhcp_provider.c @@ -84,7 +84,7 @@ METHOD(attribute_provider_t, acquire_address, host_t*, private_dhcp_provider_t *this, char *pool, identification_t *id, host_t *requested) { - if (streq(pool, "dhcp")) + if (streq(pool, "dhcp") && requested->get_family(requested) == AF_INET) { dhcp_transaction_t *transaction, *old; host_t *vip; @@ -110,7 +110,7 @@ METHOD(attribute_provider_t, release_address, bool, private_dhcp_provider_t *this, char *pool, host_t *address, identification_t *id) { - if (streq(pool, "dhcp")) + if (streq(pool, "dhcp") && address->get_family(address) == AF_INET) { dhcp_transaction_t *transaction; -- cgit v1.2.3