From 5f9c4eec3c69bb08684969ea118a1eb00cf8dd1b Mon Sep 17 00:00:00 2001 From: Marcin Siodelski Date: Tue, 12 Feb 2013 10:11:15 +0100 Subject: [PATCH] [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. --- src/bin/dhcp6/dhcp6_messages.mes | 12 ------------ src/bin/dhcp6/dhcp6_srv.cc | 24 ++++++++---------------- 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/src/bin/dhcp6/dhcp6_messages.mes b/src/bin/dhcp6/dhcp6_messages.mes index 65ad74b720..ff3868962f 100644 --- a/src/bin/dhcp6/dhcp6_messages.mes +++ b/src/bin/dhcp6/dhcp6_messages.mes @@ -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. diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 851f405de3..01e554cecb 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -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; }