Commit c2c57b49 authored by Francis Dupont's avatar Francis Dupont

[4058] Added copyDefaultOptions()

parent 27241065
......@@ -164,6 +164,7 @@ Dhcpv4Exchange::initResponse() {
if (resp_type > 0) {
resp_.reset(new Pkt4(resp_type, getQuery()->getTransid()));
copyDefaultFields();
copyDefaultOptionss();
}
}
......@@ -208,12 +209,28 @@ Dhcpv4Exchange::copyDefaultFields() {
if (dst_hw_addr) {
resp_->setRemoteHWAddr(dst_hw_addr);
}
}
void
Dhcpv4Exchange::copyDefaultOptions() {
// If this packet is relayed, we want to copy Relay Agent Info option
OptionPtr rai = query_->getOption(DHO_DHCP_AGENT_OPTIONS);
if (rai) {
resp_->addOption(rai);
}
// RFC 3011 states about the Subnet Selection Option
// "Servers configured to support this option MUST return an
// identical copy of the option to any client that sends it,
// regardless of whether or not the client requests the option in
// a parameter request list. Clients using this option MUST
// discard DHCPOFFER or DHCPACK packets that do not contain this
// option."
OptionPtr subnet_sel = query_->getOption(DHO_SUBNET_SELECTION);
if (subnet_sel) {
resp_->addOption(subnet_sel);
}
}
const std::string Dhcpv4Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_");
......
......@@ -130,6 +130,17 @@ private:
/// not NULL.
void copyDefaultFields();
/// @brief Copies default options from client's to server's message
///
/// Some options are copied from client's message into server's response,
/// e.g. Relay Agent Info option, Subnet Selection option etc.
///
/// @warning This message is called internally by @c initResponse and
/// thus it doesn't check if the resp_ value has been initialized. The
/// calling method is responsible for making sure that @c resp_ is
/// not NULL.
void copyDefaultOptions();
/// @brief Pointer to the allocation engine used by the server.
AllocEnginePtr alloc_engine_;
/// @brief Pointer to the DHCPv4 message sent by the client.
......
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