From: Francis Dupont Date: Sat, 31 Oct 2015 10:04:52 +0000 (+0100) Subject: [4109] Ported changes from fd4o6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37555efa0fd43dc209b9bb8e465be84dd3fc4a09;p=thirdparty%2Fkea.git [4109] Ported changes from fd4o6 --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 2f0687b60f..8b5554d3a3 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -555,6 +555,10 @@ bool Dhcpv6Srv::run() { rsp = processInfRequest(query); break; + case DHCPV6_DHCPV4_QUERY: + rsp = processDhcp4Query(query); + break; + default: // We received a packet type that we do not recognize. LOG_DEBUG(bad_packet6_logger, DBG_DHCP6_BASIC, DHCP6_UNKNOWN_MSG_RECEIVED) @@ -2789,6 +2793,26 @@ Dhcpv6Srv::processInfRequest(const Pkt6Ptr& inf_request) { return (reply); } +Pkt6Ptr +Dhcpv6Srv::processDhcp4Query(const Pkt6Ptr& dhcp4_query) { + + sanityCheck(dhcp4_query, OPTIONAL, OPTIONAL); + + // flags are in transid + // uint32_t flags = dhcp4_query->getTransid(); + // do nothing with DHCPV4_QUERY_FLAGS_UNICAST + + // Get the DHCPv4 message option + OptionPtr dhcp4_msg = dhcp4_query->getOption(D6O_DHCPV4_MSG); + if (dhcp4_msg) { + // Forward the whole message to the DHCPv4 server via IPC + Dhcp4o6Ipc::instance().send(dhcp4_query); + } + + // Our job is finished + return (Pkt6Ptr()); +} + size_t Dhcpv6Srv::unpackOptions(const OptionBuffer& buf, const std::string& option_space, diff --git a/src/bin/dhcp6/dhcp6_srv.h b/src/bin/dhcp6/dhcp6_srv.h index 1609af068c..e5fc32d078 100644 --- a/src/bin/dhcp6/dhcp6_srv.h +++ b/src/bin/dhcp6/dhcp6_srv.h @@ -282,6 +282,12 @@ protected: /// @return Reply message to be sent to the client. Pkt6Ptr processInfRequest(const Pkt6Ptr& inf_request); + /// @brief Processes incoming DHCPv4-query message. + /// + /// @param dhcp4_query message received from client + /// @return Reply (empty) message to (not) be sent to the client. + Pkt6Ptr processDhcp4Query(const Pkt6Ptr& dhcp4_query); + /// @brief Selects a subnet for a given client's packet. /// /// @param question client's message