list assigned leases using "ipsec leases"

This commit is contained in:
Martin Willi
2008-12-10 13:00:02 +00:00
parent ed2bcd0315
commit 6b83549d1a
10 changed files with 245 additions and 8 deletions
+72
View File
@@ -999,6 +999,77 @@ static void list(private_stroke_list_t *this, stroke_msg_t *msg, FILE *out)
DESTROY_OFFSET_IF(cert_list, offsetof(certificate_t, destroy));
}
/**
* Print leases of a single pool
*/
static void pool_leases(private_stroke_list_t *this, FILE *out, char *pool,
host_t *address, u_int size, u_int online, u_int offline)
{
enumerator_t *enumerator;
identification_t *id;
host_t *lease;
bool on;
int found = 0;
fprintf(out, "Leases in pool '%s', usage: %lu/%lu, %lu online\n",
pool, online + offline, size, online);
enumerator = this->attribute->create_lease_enumerator(this->attribute, pool);
while (enumerator && enumerator->enumerate(enumerator, &id, &lease, &on))
{
if (!address || address->ip_equals(address, lease))
{
fprintf(out, " %15H %s '%D'\n",
lease, on ? "online" : "offline", id);
found++;
}
}
enumerator->destroy(enumerator);
if (!found)
{
fprintf(out, " no matching leases found\n");
}
}
/**
* Implementation of stroke_list_t.leases
*/
static void leases(private_stroke_list_t *this, stroke_msg_t *msg, FILE *out)
{
enumerator_t *enumerator;
u_int size, offline, online;
host_t *address = NULL;
char *pool;
int found = 0;
if (msg->leases.address)
{
address = host_create_from_string(msg->leases.address, 0);
}
enumerator = this->attribute->create_pool_enumerator(this->attribute);
while (enumerator->enumerate(enumerator, &pool, &size, &online, &offline))
{
if (!msg->leases.pool || streq(msg->leases.pool, pool))
{
pool_leases(this, out, pool, address, size, online, offline);
found++;
}
}
enumerator->destroy(enumerator);
if (!found)
{
if (msg->leases.pool)
{
fprintf(out, "pool '%s' not found\n", msg->leases.pool);
}
else
{
fprintf(out, "no pools found\n");
}
}
DESTROY_IF(address);
}
/**
* Implementation of stroke_list_t.destroy
*/
@@ -1016,6 +1087,7 @@ stroke_list_t *stroke_list_create(stroke_attribute_t *attribute)
this->public.list = (void(*)(stroke_list_t*, stroke_msg_t *msg, FILE *out))list;
this->public.status = (void(*)(stroke_list_t*, stroke_msg_t *msg, FILE *out,bool))status;
this->public.leases = (void(*)(stroke_list_t*, stroke_msg_t *msg, FILE *out))leases;
this->public.destroy = (void(*)(stroke_list_t*))destroy;
this->uptime = time(NULL);