pkt4o6->setPkt6LocalAddr(pkt6->getLocalAddr());\r
pkt4o6->setPkt6Index(pkt6->getIndex());\r
pkt4o6->setPkt6Iface(pkt6->getIface());\r
+\r
+ OptionPtr oro = pkt6->getOption(D6O_ORO);\r
+ if (oro) {\r
+ const OptionBuffer& d = oro->getData();\r
+ pkt4o6->setORO(std::string((char*)d.data(), d.size()));\r
+ }\r
} else {\r
isc_throw(Pkt4o6ConstructError,\r
"The DHCPv6 message doesn't contain a DHCPv4 Message Option");\r
pkt6->setIndex(getPkt6Index());\r
pkt6->setIface(getPkt6Iface());\r
\r
-// appendRequestedOptions(query, reply);//TODO: should we remove this?\r
+ std::string oro = getORO();\r
+ \r
+ OptionPtr option_oro(new Option(Option::V6, D6O_ORO,\r
+ OptionBuffer((uint8_t*)oro.c_str(),\r
+ (uint8_t*)oro.c_str() + oro.size())));\r
+ pkt6->addOption(option_oro);\r
+ \r
\r
OptionPtr option(new Option(Option::V6,\r
OPTION_DHCPV4_MSG,\r
\r
pt.put("RemoteAddr", getPkt6RemoteAddr().toText());\r
pt.put("LocalAddr", getPkt6LocalAddr().toText());\r
-// pt.put("RemotePort", pkt6_->getRemotePort());\r
-// pt.put("LocalPort", pkt6_->getLocalPort());\r
+// pt.put("RemotePort", getPkt6RemotePort());\r
+// pt.put("LocalPort", getPkt6LocalPort());\r
pt.put("Index", getPkt6Index());\r
pt.put("Iface", getPkt6Iface());\r
- \r
pt.put("Flags", getFlags());\r
+// if (getORO().size() > 0)\r
+// pt.put("ORO", getORO());\r
+ \r
std::stringstream sout;\r
write_json(sout, pt);\r
\r
setPkt6Iface(pt.get<std::string>("Iface"));\r
setFlags(pt.get<uint32_t>("Flags"));\r
setIface(getPkt6Iface());//Use Pkt6's Iface to find a subnet\r
+ \r
+ try {\r
+ setORO(pt.get<std::string>("ORO"));\r
+ } catch (const std::exception& ex) {}\r
} catch (const std::exception& ex) {\r
//TODO: logging\r
}\r
/// @return interface name\r
void setPkt6Iface(const std::string& iface ) { pkt6_iface_ = iface; };\r
\r
+ /// @brief Returns a string of DHCPv6 ORO\r
+ ///\r
+ /// @return a string of DHCPv6 ORO\r
+ std::string&\r
+ getORO() { return (oro_data_); }\r
+ \r
+ /// @brief Set buffer of DHCPv6 ORO\r
+ ///\r
+ /// @param oro_data a string of DHCPv6 ORO data\r
+ void\r
+ setORO(const std::string& oro_data) { oro_data_ = oro_data; }\r
+ \r
protected:\r
\r
/// @brief DHCP4o6 flags field, the same as transaction-id in DHCPv6\r
\r
/// @brief a json-format string containing ancillary data used by DHCP4o6\r
std::string buffer_ancillary_;\r
+ \r
+ /// @brief a string containing DHCPv6 ORO data\r
+ std::string oro_data_;\r
};// pkt4o6 class\r
\r
} // isc::dhcp namespace\r