From: Francis Dupont Date: Thu, 16 Jun 2016 20:00:41 +0000 (+0200) Subject: [4109a] Rebased X-Git-Tag: trac4273_base~5^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d66833c0b8158cb58b28c9f25cd93d1620111335;p=thirdparty%2Fkea.git [4109a] Rebased --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index b8159a15a4..182cf3386b 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -631,6 +631,10 @@ Dhcpv6Srv::processPacket(Pkt6Ptr& query, Pkt6Ptr& rsp) { 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) @@ -2784,6 +2788,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 + Dhcp6to4Ipc::instance().send(dhcp4_query); + } + + // Our job is finished + return (Pkt6Ptr()); +} + void Dhcpv6Srv::classifyByVendor(const Pkt6Ptr& pkt, std::string& classes) { OptionVendorClassPtr vclass = boost::dynamic_pointer_cast< OptionVendorClass>(pkt->getOption(D6O_VENDOR_CLASS)); diff --git a/src/bin/dhcp6/dhcp6_srv.h b/src/bin/dhcp6/dhcp6_srv.h index a49ac51cb5..0c9f6c2216 100644 --- a/src/bin/dhcp6/dhcp6_srv.h +++ b/src/bin/dhcp6/dhcp6_srv.h @@ -289,6 +289,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