|
@@ -631,6 +631,10 @@ Dhcpv6Srv::processPacket(Pkt6Ptr& query, Pkt6Ptr& rsp) {
|
|
rsp = processInfRequest(query);
|
|
rsp = processInfRequest(query);
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case DHCPV6_DHCPV4_QUERY:
|
|
|
|
+ rsp = processDhcp4Query(query);
|
|
|
|
+ break;
|
|
|
|
+
|
|
default:
|
|
default:
|
|
// We received a packet type that we do not recognize.
|
|
// We received a packet type that we do not recognize.
|
|
LOG_DEBUG(bad_packet6_logger, DBG_DHCP6_BASIC, DHCP6_UNKNOWN_MSG_RECEIVED)
|
|
LOG_DEBUG(bad_packet6_logger, DBG_DHCP6_BASIC, DHCP6_UNKNOWN_MSG_RECEIVED)
|
|
@@ -2784,6 +2788,26 @@ Dhcpv6Srv::processInfRequest(const Pkt6Ptr& inf_request) {
|
|
return (reply);
|
|
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) {
|
|
void Dhcpv6Srv::classifyByVendor(const Pkt6Ptr& pkt, std::string& classes) {
|
|
OptionVendorClassPtr vclass = boost::dynamic_pointer_cast<
|
|
OptionVendorClassPtr vclass = boost::dynamic_pointer_cast<
|
|
OptionVendorClass>(pkt->getOption(D6O_VENDOR_CLASS));
|
|
OptionVendorClass>(pkt->getOption(D6O_VENDOR_CLASS));
|