From: Marcin Siodelski Date: Mon, 20 Jan 2014 15:46:07 +0000 (+0100) Subject: [3295] Propagate FQDN option within reply message for renew functions. X-Git-Tag: bind10-1.2.0beta1-release~83^2~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=579f954850640b4dc7ad5de05b07eaee5175f19b;p=thirdparty%2Fkea.git [3295] Propagate FQDN option within reply message for renew functions. --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 158fa77d01..d641c8168e 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -1451,8 +1451,8 @@ Dhcpv6Srv::assignIA_PD(const Subnet6Ptr& subnet, const DuidPtr& duid, OptionPtr Dhcpv6Srv::renewIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid, - const Pkt6Ptr& query, boost::shared_ptr ia, - const Option6ClientFqdnPtr& fqdn) { + const Pkt6Ptr& query, const Pkt6Ptr& answer, + boost::shared_ptr ia) { if (!subnet) { // There's no subnet select for this client. There's nothing to renew. boost::shared_ptr ia_rsp(new Option6IA(D6O_IA_NA, ia->getIAID())); @@ -1501,6 +1501,8 @@ Dhcpv6Srv::renewIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid, // the update. bool do_fwd = false; bool do_rev = false; + Option6ClientFqdnPtr fqdn = boost::dynamic_pointer_cast< + Option6ClientFqdn>(answer->getOption(D6O_CLIENT_FQDN)); if (fqdn) { if (fqdn->getFlag(Option6ClientFqdn::FLAG_S)) { do_fwd = true; @@ -1693,8 +1695,7 @@ Dhcpv6Srv::renewIA_PD(const Subnet6Ptr& subnet, const DuidPtr& duid, } void -Dhcpv6Srv::renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply, - const Option6ClientFqdnPtr& fqdn) { +Dhcpv6Srv::renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply) { // We need to renew addresses for all IA_NA options in the client's // RENEW message. @@ -1738,10 +1739,9 @@ Dhcpv6Srv::renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply, switch (opt->second->getType()) { case D6O_IA_NA: { - OptionPtr answer_opt = renewIA_NA(subnet, duid, renew, + OptionPtr answer_opt = renewIA_NA(subnet, duid, renew, reply, boost::dynamic_pointer_cast< - Option6IA>(opt->second), - fqdn); + Option6IA>(opt->second)); if (answer_opt) { reply->addOption(answer_opt); } @@ -2178,7 +2178,7 @@ Dhcpv6Srv::processRenew(const Pkt6Ptr& renew) { appendRequestedOptions(renew, reply); Option6ClientFqdnPtr fqdn = processClientFqdn(renew, reply); - renewLeases(renew, reply, fqdn); + renewLeases(renew, reply); createNameChangeRequests(reply); return (reply); diff --git a/src/bin/dhcp6/dhcp6_srv.h b/src/bin/dhcp6/dhcp6_srv.h index 25e3452670..2203467c4f 100644 --- a/src/bin/dhcp6/dhcp6_srv.h +++ b/src/bin/dhcp6/dhcp6_srv.h @@ -252,12 +252,15 @@ protected: /// @param subnet subnet the sender belongs to /// @param duid client's duid /// @param query client's message + /// @param answer server's response to the client's message. This + /// message should contain Client FQDN option being sent by the server + /// to the client (if the client sent this option to the server). /// @param ia IA_NA option that is being renewed /// @param fqdn DHCPv6 Client FQDN Option included in the server's response /// @return IA_NA option (server's response) OptionPtr renewIA_NA(const Subnet6Ptr& subnet, const DuidPtr& duid, - const Pkt6Ptr& query, boost::shared_ptr ia, - const Option6ClientFqdnPtr& fqdn); + const Pkt6Ptr& query, const Pkt6Ptr& answer, + boost::shared_ptr ia); /// @brief Renews specific IA_PD option /// @@ -436,10 +439,7 @@ protected: /// as IA_NA/IAADDR to reply packet. /// @param renew client's message asking for renew /// @param reply server's response - /// @param fqdn A DHCPv6 Client FQDN %Option generated in the response to the - /// client's FQDN option. - void renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply, - const Option6ClientFqdnPtr& fqdn); + void renewLeases(const Pkt6Ptr& renew, Pkt6Ptr& reply); /// @brief Attempts to release received addresses ///