Commit db7182c1 authored by Marcin Siodelski's avatar Marcin Siodelski

[5388] Corrected bug in allocation engine.

The bug was manifesting itself in inability to find an existing lease
within shared network when client performed DORA without a hint.
parent eb2a764b
......@@ -1062,6 +1062,31 @@ TEST_F(Dhcpv4SharedNetworkTest, poolInSharedNetworkShortage) {
});
}
// Returning client sends 4-way exchange.
TEST_F(Dhcpv4SharedNetworkTest, returningClientStartsOver) {
// Create client.
Dhcp4Client client(Dhcp4Client::SELECTING);
client.setIfaceName("eth1");
client.includeClientId("01:02:03:04");
// Configure the server with one shared network including two subnets and
// one subnet outside of the shared network.
configure(NETWORKS_CONFIG[0], *client.getServer());
// Client requests an address in first subnet within a shared network.
// We'll send a hint of 192.0.2.63 and expect to get it.
testAssigned([this, &client]() {
doDORA(client, "192.0.2.63", "192.0.2.63");
});
// The client reboots and performs 4-way exchange again without a hint.
// It should be assigned the same (existing) lease.
testAssigned([this, &client]() {
doDORA(client, "192.0.2.63");
});
}
// Shared network is selected based on giaddr value (relay specified
// on shared network level)
TEST_F(Dhcpv4SharedNetworkTest, sharedNetworkSelectedByRelay1) {
......
......@@ -2443,6 +2443,10 @@ void findClientLease(AllocEngine::ClientContext4& ctx, Lease4Ptr& client_lease)
// configured to ignore client identifier).
if (client_id) {
client_lease = lease_mgr.getLease4(*client_id, subnet->getID());
if (client_lease) {
ctx.subnet_ = subnet;
return;
}
}
// If no lease found using the client identifier, try the lookup using
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment