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:
@@ -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_");
|
||||||
|
@@ -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.
|
||||||
|
Reference in New Issue
Block a user