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)
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));
/// @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