Commit 173b64b0 authored by Francis Dupont's avatar Francis Dupont
Browse files

[master] Merged trac4121 (distcheck warning)

parents d4acc516 ef5973b5
......@@ -682,6 +682,39 @@ LibDHCP::packOptions(isc::util::OutputBuffer& buf,
}
}
void
LibDHCP::packOptions4(isc::util::OutputBuffer& buf,
const OptionCollection& options) {
OptionCollection::const_iterator it = options.begin();
for (; it != options.end(); ++it) {
// Some options must be last
if ((it->first == DHO_DHCP_AGENT_OPTIONS) ||
(it->first == DHO_END)) {
continue;
}
it->second->pack(buf);
}
// Add the RAI option if it exists
it = options.find(DHO_DHCP_AGENT_OPTIONS);
if (it != options.end()) {
it->second->pack(buf);
}
// And at the end the END option
it = options.find(DHO_END);
if (it != options.end()) {
it->second->pack(buf);
}
}
void
LibDHCP::packOptions6(isc::util::OutputBuffer& buf,
const OptionCollection& options) {
for (OptionCollection::const_iterator it = options.begin();
it != options.end(); ++it) {
it->second->pack(buf);
}
}
void LibDHCP::OptionFactoryRegister(Option::Universe u,
uint16_t opt_type,
Option::Factory* factory) {
......
......@@ -134,9 +134,19 @@ public:
///
/// @param buf output buffer (assembled options will be stored here)
/// @param options collection of options to store to
/// Generic version: to be used when there is no specific order
static void packOptions(isc::util::OutputBuffer& buf,
const isc::dhcp::OptionCollection& options);
/// DHCPv4 version: put some options last
static void packOptions4(isc::util::OutputBuffer& buf,
const isc::dhcp::OptionCollection& options);
/// DHCPv6 version (currently same than the generic one)
static void packOptions6(isc::util::OutputBuffer& buf,
const isc::dhcp::OptionCollection& options);
/// @brief Parses provided buffer as DHCPv6 options and creates
/// Option objects.
///
......
......@@ -143,7 +143,7 @@ Pkt4::pack() {
// write DHCP magic cookie
buffer_out_.writeUint32(DHCP_OPTIONS_COOKIE);
LibDHCP::packOptions(buffer_out_, options_);
LibDHCP::packOptions4(buffer_out_, options_);
// add END option that indicates end of options
// (End option is very simple, just a 255 octet)
......
......@@ -244,7 +244,7 @@ Pkt6::packUDP() {
buffer_out_.writeUint8( (transid_) & 0xff );
// the rest are options
LibDHCP::packOptions(buffer_out_, options_);
LibDHCP::packOptions6(buffer_out_, options_);
}
catch (const Exception& e) {
// An exception is thrown and message will be written to Logger
......
......@@ -342,7 +342,7 @@ TEST_F(LibDhcpTest, packOptions6) {
OutputBuffer assembled(512);
EXPECT_NO_THROW(LibDHCP::packOptions(assembled, opts));
EXPECT_NO_THROW(LibDHCP::packOptions6(assembled, opts));
EXPECT_EQ(sizeof(v6packed), assembled.getLength());
EXPECT_EQ(0, memcmp(assembled.getData(), v6packed, sizeof(v6packed)));
}
......@@ -528,15 +528,16 @@ TEST_F(LibDhcpTest, packOptions4) {
// the map. This gurantees that options are packed in the same order
// they were added. Otherwise, options would get sorted by code and
// the resulting buffer wouldn't match with the reference buffer.
// But this doesn't apply to the RAI code which is always the last one
opts.insert(make_pair(opt1->getType(), opt1));
opts.insert(make_pair(opt1->getType(), opt2));
opts.insert(make_pair(rai->getType(), rai));
opts.insert(make_pair(opt1->getType(), opt3));
opts.insert(make_pair(opt1->getType(), opt4));
opts.insert(make_pair(opt1->getType(), opt5));
opts.insert(make_pair(opt1->getType(), rai));
OutputBuffer buf(100);
EXPECT_NO_THROW(LibDHCP::packOptions(buf, opts));
EXPECT_NO_THROW(LibDHCP::packOptions4(buf, opts));
ASSERT_EQ(buf.getLength(), sizeof(v4_opts));
EXPECT_EQ(0, memcmp(v4_opts, buf.getData(), sizeof(v4_opts)));
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment