Added identity_lease option to create random or identity based DHCP leases

This commit is contained in:
Martin Willi
2010-03-25 14:28:29 +01:00
parent 4f0932ecfe
commit e06a6154e2
+17 -3
View File
@@ -95,6 +95,11 @@ struct private_dhcp_socket_t {
*/ */
int receive; int receive;
/**
* Do we use per-identity or random leases (and MAC addresses)
*/
bool identity_lease;
/** /**
* DHCP server address, or broadcast * DHCP server address, or broadcast
*/ */
@@ -192,7 +197,7 @@ static int prepare_dhcp(private_dhcp_socket_t *this,
dhcp_option_t *option; dhcp_option_t *option;
int optlen = 0; int optlen = 0;
host_t *src; host_t *src;
u_int hash; u_int32_t id;
memset(dhcp, 0, sizeof(*dhcp)); memset(dhcp, 0, sizeof(*dhcp));
dhcp->opcode = BOOTREQUEST; dhcp->opcode = BOOTREQUEST;
@@ -222,8 +227,15 @@ static int prepare_dhcp(private_dhcp_socket_t *this,
dhcp->client_hw_addr[0] = 0x7A; dhcp->client_hw_addr[0] = 0x7A;
dhcp->client_hw_addr[1] = 0xA7; dhcp->client_hw_addr[1] = 0xA7;
/* with ID specific postfix */ /* with ID specific postfix */
hash = htonl(chunk_hash(chunk)); if (this->identity_lease)
memcpy(&dhcp->client_hw_addr[2], &hash, 4); {
id = htonl(chunk_hash(chunk));
}
else
{
id = transaction->get_id(transaction);
}
memcpy(&dhcp->client_hw_addr[2], &id, sizeof(id));
dhcp->magic_cookie = htonl(0x63825363); dhcp->magic_cookie = htonl(0x63825363);
@@ -600,6 +612,8 @@ dhcp_socket_t *dhcp_socket_create()
destroy(this); destroy(this);
return NULL; return NULL;
} }
this->identity_lease = lib->settings->get_bool(lib->settings,
"charon.plugins.dhcp.identity_lease", FALSE);
this->dst = host_create_from_string(lib->settings->get_str(lib->settings, this->dst = host_create_from_string(lib->settings->get_str(lib->settings,
"charon.plugins.dhcp.server", "255.255.255.255"), "charon.plugins.dhcp.server", "255.255.255.255"),
DHCP_SERVER_PORT); DHCP_SERVER_PORT);