2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-09-02 23:15:20 +00:00

[4057] Addressed review comments

This commit is contained in:
Francis Dupont
2015-10-09 20:34:53 +02:00
parent 64338c35f3
commit 260842f54e

View File

@@ -292,16 +292,24 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query) const {
selector.client_classes_ = query->classes_; selector.client_classes_ = query->classes_;
selector.iface_name_ = query->getIface(); selector.iface_name_ = query->getIface();
// If the link-selection sub-option is present, extract its value.
// "The link-selection sub-option is used by any DHCP relay agent
// that desires to specify a subnet/link for a DHCP client request
// that it is relaying but needs the subnet/link specification to
// be different from the IP address the DHCP server should use
// when communicating with the relay agent." (RFC 3257)
OptionPtr rai = query->getOption(DHO_DHCP_AGENT_OPTIONS); OptionPtr rai = query->getOption(DHO_DHCP_AGENT_OPTIONS);
if (rai) { if (rai) {
OptionCustomPtr oc = boost::dynamic_pointer_cast<OptionCustom>(rai); OptionCustomPtr rai_custom =
if (oc) { boost::dynamic_pointer_cast<OptionCustom>(rai);
OptionPtr ols = oc->getOption(RAI_OPTION_LINK_SELECTION); if (rai_custom) {
if (ols) { OptionPtr link_select =
OptionBuffer lsb = ols->getData(); rai_custom->getOption(RAI_OPTION_LINK_SELECTION);
if (lsb.size() == sizeof(uint32_t)) { if (link_select) {
OptionBuffer link_select_buf = link_select->getData();
if (link_select_buf.size() == sizeof(uint32_t)) {
selector.option_select_ = selector.option_select_ =
IOAddress::fromBytes(AF_INET, &lsb[0]); IOAddress::fromBytes(AF_INET, &link_select_buf[0]);
} }
} }
} }