2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 05:55:28 +00:00

[4058] Added copyDefaultOptions()

This commit is contained in:
Francis Dupont
2015-10-13 17:14:34 +02:00
parent 2724106509
commit c2c57b4941
2 changed files with 28 additions and 0 deletions

View File

@@ -164,6 +164,7 @@ Dhcpv4Exchange::initResponse() {
if (resp_type > 0) { if (resp_type > 0) {
resp_.reset(new Pkt4(resp_type, getQuery()->getTransid())); resp_.reset(new Pkt4(resp_type, getQuery()->getTransid()));
copyDefaultFields(); copyDefaultFields();
copyDefaultOptionss();
} }
} }
@@ -208,12 +209,28 @@ Dhcpv4Exchange::copyDefaultFields() {
if (dst_hw_addr) { if (dst_hw_addr) {
resp_->setRemoteHWAddr(dst_hw_addr); resp_->setRemoteHWAddr(dst_hw_addr);
} }
}
void
Dhcpv4Exchange::copyDefaultOptions() {
// If this packet is relayed, we want to copy Relay Agent Info option // If this packet is relayed, we want to copy Relay Agent Info option
OptionPtr rai = query_->getOption(DHO_DHCP_AGENT_OPTIONS); OptionPtr rai = query_->getOption(DHO_DHCP_AGENT_OPTIONS);
if (rai) { if (rai) {
resp_->addOption(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_"); const std::string Dhcpv4Srv::VENDOR_CLASS_PREFIX("VENDOR_CLASS_");

View File

@@ -130,6 +130,17 @@ private:
/// not NULL. /// not NULL.
void copyDefaultFields(); 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. /// @brief Pointer to the allocation engine used by the server.
AllocEnginePtr alloc_engine_; AllocEnginePtr alloc_engine_;
/// @brief Pointer to the DHCPv4 message sent by the client. /// @brief Pointer to the DHCPv4 message sent by the client.