Parcourir la source

[4057] Addressed review comments

Francis Dupont il y a 9 ans
Parent
commit
260842f54e
1 fichiers modifiés avec 15 ajouts et 7 suppressions
  1. 15 7
      src/bin/dhcp4/dhcp4_srv.cc

+ 15 - 7
src/bin/dhcp4/dhcp4_srv.cc

@@ -292,16 +292,24 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query) const {
     selector.client_classes_ = query->classes_;
     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);
     if (rai) {
-        OptionCustomPtr oc = boost::dynamic_pointer_cast<OptionCustom>(rai);
-        if (oc) {
-            OptionPtr ols = oc->getOption(RAI_OPTION_LINK_SELECTION);
-            if (ols) {
-                OptionBuffer lsb = ols->getData();
-                if (lsb.size() == sizeof(uint32_t)) {
+        OptionCustomPtr rai_custom =
+            boost::dynamic_pointer_cast<OptionCustom>(rai);
+        if (rai_custom) {
+            OptionPtr link_select =
+                rai_custom->getOption(RAI_OPTION_LINK_SELECTION);
+            if (link_select) {
+                OptionBuffer link_select_buf = link_select->getData();
+                if (link_select_buf.size() == sizeof(uint32_t)) {
                     selector.option_select_ =
-                        IOAddress::fromBytes(AF_INET, &lsb[0]);
+                        IOAddress::fromBytes(AF_INET, &link_select_buf[0]);
                 }
             }
         }