Commit 5f9c4eec authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[2704] Use the selectSubnet() subnet function to pick the suitable subnet.

The selectSubnet() function offers two ways to find a subnet for a
particular interface: using the name of the interface that the subnet is
configured for; and using the packet source address. Also, the redundant
warning is removed if suitable subnet was not found as this warning is
already issued elsewhere.
parent ea110815
......@@ -132,18 +132,6 @@ IPv6 DHCP server but it is not running.
During startup the IPv6 DHCP server failed to detect any network
interfaces and is therefore shutting down.
% DHCP6_NO_SUBNET_DEF_OPT failed to find subnet for address %1 when adding default options
This warning message indicates that when attempting to add default options
to a response, the server found that it was not configured to support
the subnet from which the DHCPv6 request was received. The packet has
been ignored.
% DHCP6_NO_SUBNET_REQ_OPT failed to find subnet for address %1 when adding requested options
This warning message indicates that when attempting to add requested
options to a response, the server found that it was not configured
to support the subnet from which the DHCPv6 request was received.
The packet has been ignored.
% DHCP6_OPEN_SOCKET opening sockets on port %1
A debug message issued during startup, this indicates that the IPv6 DHCP
server is about to open sockets on the specified port.
......
......@@ -393,29 +393,21 @@ Dhcpv6Srv::copyDefaultOptions(const Pkt6Ptr& question, Pkt6Ptr& answer) {
}
void
Dhcpv6Srv::appendDefaultOptions(const Pkt6Ptr& question, Pkt6Ptr& answer) {
Dhcpv6Srv::appendDefaultOptions(const Pkt6Ptr&, Pkt6Ptr& answer) {
// add server-id
answer->addOption(getServerID());
// Get the subnet object. It holds options to be sent to the client
// that belongs to the particular subnet.
Subnet6Ptr subnet = CfgMgr::instance().getSubnet6(question->getRemoteAddr());
// Warn if subnet is not supported and quit.
if (!subnet) {
LOG_WARN(dhcp6_logger, DHCP6_NO_SUBNET_DEF_OPT)
.arg(question->getRemoteAddr().toText());
return;
}
}
void
Dhcpv6Srv::appendRequestedOptions(const Pkt6Ptr& question, Pkt6Ptr& answer) {
// Get the subnet for a particular address.
Subnet6Ptr subnet = CfgMgr::instance().getSubnet6(question->getRemoteAddr());
// Get the configured subnet suitable for the incoming packet.
Subnet6Ptr subnet = selectSubnet(question);
// Leave if there is no subnet matching the incoming packet.
// There is no need to log the error message here because
// it will be logged in the assignLease() when it fails to
// pick the suitable subnet. We don't want to duplicate
// error messages in such case.
if (!subnet) {
LOG_WARN(dhcp6_logger, DHCP6_NO_SUBNET_REQ_OPT)
.arg(question->getRemoteAddr().toText());
return;
}
......
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