Commit b57fc089 authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰
Browse files

[2719] Emergency fix for renew when there are no subnets configured.

parent aff7100a
5XX. [bug] tmark, tomek
b10-dhcp6: Server aborts operation when receiving renew and there
are no IPv6 subnets configured.
(Trac 2719, git TBD)
573. [bug] stephen
Fixed problem whereby the DHCP server crashed if it ran out of
addresses. Such a condition now causes a packet to be returned
......
......@@ -222,6 +222,16 @@ as a hint for possible requested address.
% DHCP6_QUERY_DATA received packet length %1, data length %2, data is %3
A debug message listing the data received from the client or relay.
% DHCP6_RENEW_UNKNOWN_SUBNET RENEW message received from client on unknown subnet (duid=%1, iaid=%2)
A warning message indicating that a client is attempting to renew his lease,
but the server does not have any information about the subnet this client belongs
to. This may mean that faulty the mobile client changed its location and is trying to
renew its old address (client is supposed to send confirm, not rewew in such cases,
according to RFC3315) or the server configuration has changed and information about
existing subnet was removed. Note that in a sense this is worse case of DHCP6_UNKNOWN_RENEW,
as not only the lease is unknown, but also the subnet is. Depending on the reasons
of this condition, it may or may not correct on its own.
% DHCP6_REQUIRED_OPTIONS_CHECK_FAIL %1 message received from %2 failed the following check: %3
This message indicates that received DHCPv6 packet is invalid. This may be due
to a number of reasons, e.g. the mandatory client-id option is missing,
......
......@@ -714,6 +714,21 @@ Dhcpv6Srv::assignIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid,
OptionPtr
Dhcpv6Srv::renewIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid,
Pkt6Ptr /* question */, boost::shared_ptr<Option6IA> ia) {
if (!subnet) {
// There's no subnet select for this client. There's nothing to renew.
boost::shared_ptr<Option6IA> ia_rsp(new Option6IA(D6O_IA_NA, ia->getIAID()));
// Insert status code NoAddrsAvail.
ia_rsp->addOption(createStatusCode(STATUS_NoBinding,
"Sorry, no known leases for this duid/iaid."));
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL, DHCP6_RENEW_UNKNOWN_SUBNET)
.arg(duid->toText())
.arg(ia->getIAID());
return (ia_rsp);
}
Lease6Ptr lease = LeaseMgrFactory::instance().getLease6(*duid, ia->getIAID(),
subnet->getID());
......@@ -777,7 +792,9 @@ Dhcpv6Srv::renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply) {
// perhaps this should be logged on some higher level? This is most likely
// configuration bug.
LOG_ERROR(dhcp6_logger, DHCP6_SUBNET_SELECTION_FAILED);
LOG_ERROR(dhcp6_logger, DHCP6_SUBNET_SELECTION_FAILED)
.arg(renew->getRemoteAddr().toText())
.arg(renew->getName());
} else {
LOG_DEBUG(dhcp6_logger, DBG_DHCP6_DETAIL_DATA, DHCP6_SUBNET_SELECTED)
.arg(subnet->toText());
......
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