|
@@ -13,20 +13,17 @@
|
|
|
// PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
|
#include <config.h>
|
|
|
-#include <asiolink/io_address.h>
|
|
|
-#include <dhcp/dhcp4.h>
|
|
|
-#include <dhcp/libdhcp++.h>
|
|
|
-#include <dhcp/option_int.h>
|
|
|
+
|
|
|
+#include <dhcp/dhcp6.h>
|
|
|
+#include <dhcp/option.h>
|
|
|
#include <dhcp/pkt4o6.h>
|
|
|
#include <exceptions/exceptions.h>
|
|
|
+#include <util/buffer.h>
|
|
|
|
|
|
-#include <algorithm>
|
|
|
-#include <iostream>
|
|
|
-#include <sstream>
|
|
|
-
|
|
|
-using namespace std;
|
|
|
-using namespace isc::dhcp;
|
|
|
using namespace isc::asiolink;
|
|
|
+using namespace isc::dhcp;
|
|
|
+using namespace isc::util;
|
|
|
+using namespace std;
|
|
|
|
|
|
namespace {
|
|
|
|
|
@@ -37,14 +34,29 @@ const IOAddress DEFAULT_ADDRESS("0.0.0.0");
|
|
|
namespace isc {
|
|
|
namespace dhcp {
|
|
|
|
|
|
-Pkt4o6::Pkt4o6(const uint8_t* data, size_t len, const Pkt6Ptr& pkt6)
|
|
|
- :Pkt4(data, len), pkt6_(pkt6)
|
|
|
+Pkt4o6::Pkt4o6(const OptionBuffer& pkt4, const Pkt6Ptr& pkt6)
|
|
|
+ :Pkt4(&pkt4[0], pkt4.size()), pkt6_(pkt6)
|
|
|
{
|
|
|
+ static_cast<void>(pkt6->delOption(D6O_DHCPV4_MSG));
|
|
|
setIface(pkt6->getIface());
|
|
|
setIndex(pkt6->getIndex());
|
|
|
setRemoteAddr(pkt6->getRemoteAddr());
|
|
|
}
|
|
|
|
|
|
+Pkt4o6::Pkt4o6(const Pkt4Ptr& pkt4, const Pkt6Ptr& pkt6)
|
|
|
+ :Pkt4(*pkt4), pkt6_(pkt6) {
|
|
|
+}
|
|
|
+
|
|
|
+void Pkt4o6::pack() {
|
|
|
+ Pkt4::pack();
|
|
|
+ OutputBuffer& buf = getBuffer();
|
|
|
+ const uint8_t* ptr = static_cast<const uint8_t*>(buf.getData());
|
|
|
+ OptionBuffer msg(ptr, ptr + buf.getLength());
|
|
|
+ OptionPtr dhcp4_msg(new Option(Option::V6, D6O_DHCPV4_MSG, msg));
|
|
|
+ pkt6_->addOption(dhcp4_msg);
|
|
|
+ pkt6_->pack();
|
|
|
+}
|
|
|
+
|
|
|
} // end of namespace isc::dhcp
|
|
|
|
|
|
} // end of namespace isc
|