Commit 894e0ca1 authored by Tomek Mrugalski's avatar Tomek Mrugalski 🛰

[master] Merge branch 'trac2719' (bug for handling unexpected RENEWs in DHCPv6)

Conflicts:
	ChangeLog
parents 4982a874 3132b8b1
576. [bug] tmark, tomek
b10-dhcp6: Fixed bug when the server aborts operation when
receiving renew and there are no IPv6 subnets configured.
(Trac 2719, git 3132b8b19495470bbfd0f2ba0fe7da443926034b)
575. [bug] marcin
b10-dhcp6: Fixed the bug whereby the subnet for the incoming
packet was selected using only its source address. The subnet
......
......@@ -210,6 +210,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,
......
......@@ -556,9 +556,7 @@ Dhcpv6Srv::assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer) {
// thing this client can get is some global information (like DNS
// servers).
// perhaps this should be logged on some higher level? This is most likely
// configuration bug.
LOG_ERROR(dhcp6_logger, DHCP6_SUBNET_SELECTION_FAILED)
LOG_WARN(dhcp6_logger, DHCP6_SUBNET_SELECTION_FAILED)
.arg(question->getRemoteAddr().toText())
.arg(question->getName());
......@@ -706,6 +704,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());
......@@ -767,9 +780,9 @@ Dhcpv6Srv::renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply) {
// thing this client can get is some global information (like DNS
// servers).
// perhaps this should be logged on some higher level? This is most likely
// configuration bug.
LOG_ERROR(dhcp6_logger, DHCP6_SUBNET_SELECTION_FAILED);
LOG_WARN(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