From: Razvan Becheriu Date: Thu, 24 Feb 2022 14:49:15 +0000 (+0200) Subject: [#2181] pkt now uses OptionCollectionPtr instead of OptionCollection X-Git-Tag: Kea-2.1.4~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d26dae299117193249fbbbea2f14f502cd564f6;p=thirdparty%2Fkea.git [#2181] pkt now uses OptionCollectionPtr instead of OptionCollection --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 555c566713..51becc86fd 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -1080,7 +1080,7 @@ Dhcpv6Srv::processDhcp6Query(Pkt6Ptr& query, Pkt6Ptr& rsp) { *callout_handle); } catch (...) { // Make sure we don't orphan a parked packet. - HooksManager::drop("leases4_committed", query); + HooksManager::drop("leases6_committed", query); throw; } @@ -1764,13 +1764,12 @@ Dhcpv6Srv::assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer, // responses in answer message (ADVERTISE or REPLY). // // @todo: IA_TA once we implement support for temporary addresses. - for (OptionCollection::iterator opt = question->options_.begin(); - opt != question->options_.end(); ++opt) { - switch (opt->second->getType()) { + for (const auto& opt : (*question->options_)) { + switch (opt.second->getType()) { case D6O_IA_NA: { OptionPtr answer_opt = assignIA_NA(question, ctx, boost::dynamic_pointer_cast< - Option6IA>(opt->second)); + Option6IA>(opt.second)); if (answer_opt) { answer->addOption(answer_opt); } @@ -1779,7 +1778,7 @@ Dhcpv6Srv::assignLeases(const Pkt6Ptr& question, Pkt6Ptr& answer, case D6O_IA_PD: { OptionPtr answer_opt = assignIA_PD(question, ctx, boost::dynamic_pointer_cast< - Option6IA>(opt->second)); + Option6IA>(opt.second)); if (answer_opt) { answer->addOption(answer_opt); } @@ -2657,13 +2656,12 @@ Dhcpv6Srv::extendLeases(const Pkt6Ptr& query, Pkt6Ptr& reply, // Save the originally selected subnet. Subnet6Ptr orig_subnet = ctx.subnet_; - for (OptionCollection::iterator opt = query->options_.begin(); - opt != query->options_.end(); ++opt) { - switch (opt->second->getType()) { + for (const auto& opt : (*query->options_)) { + switch (opt.second->getType()) { case D6O_IA_NA: { OptionPtr answer_opt = extendIA_NA(query, ctx, boost::dynamic_pointer_cast< - Option6IA>(opt->second)); + Option6IA>(opt.second)); if (answer_opt) { reply->addOption(answer_opt); } @@ -2673,7 +2671,7 @@ Dhcpv6Srv::extendLeases(const Pkt6Ptr& query, Pkt6Ptr& reply, case D6O_IA_PD: { OptionPtr answer_opt = extendIA_PD(query, ctx, boost::dynamic_pointer_cast< - Option6IA>(opt->second)); + Option6IA>(opt.second)); if (answer_opt) { reply->addOption(answer_opt); } @@ -2710,13 +2708,12 @@ Dhcpv6Srv::releaseLeases(const Pkt6Ptr& release, Pkt6Ptr& reply, // handled properly. Therefore the releaseIA_NA and releaseIA_PD options // may turn the status code to some error, but can't turn it back to success. int general_status = STATUS_Success; - for (OptionCollection::iterator opt = release->options_.begin(); - opt != release->options_.end(); ++opt) { + for (const auto& opt : (*release->options_)) { Lease6Ptr old_lease; - switch (opt->second->getType()) { + switch (opt.second->getType()) { case D6O_IA_NA: { OptionPtr answer_opt = releaseIA_NA(ctx.duid_, release, general_status, - boost::dynamic_pointer_cast(opt->second), + boost::dynamic_pointer_cast(opt.second), old_lease); if (answer_opt) { reply->addOption(answer_opt); @@ -2725,7 +2722,7 @@ Dhcpv6Srv::releaseLeases(const Pkt6Ptr& release, Pkt6Ptr& reply, } case D6O_IA_PD: { OptionPtr answer_opt = releaseIA_PD(ctx.duid_, release, general_status, - boost::dynamic_pointer_cast(opt->second), + boost::dynamic_pointer_cast(opt.second), old_lease); if (answer_opt) { reply->addOption(answer_opt); @@ -3409,12 +3406,11 @@ Dhcpv6Srv::declineLeases(const Pkt6Ptr& decline, Pkt6Ptr& reply, // may turn the status code to some error, but can't turn it back to success. int general_status = STATUS_Success; - for (OptionCollection::iterator opt = decline->options_.begin(); - opt != decline->options_.end(); ++opt) { - switch (opt->second->getType()) { + for (const auto& opt : (*decline->options_)) { + switch (opt.second->getType()) { case D6O_IA_NA: { OptionPtr answer_opt = declineIA(decline, ctx.duid_, general_status, - boost::dynamic_pointer_cast(opt->second), + boost::dynamic_pointer_cast(opt.second), ctx.new_leases_); if (answer_opt) { diff --git a/src/bin/dhcp6/tests/dhcp6_client.cc b/src/bin/dhcp6/tests/dhcp6_client.cc index d41d339c13..bbb6cd5ed9 100644 --- a/src/bin/dhcp6/tests/dhcp6_client.cc +++ b/src/bin/dhcp6/tests/dhcp6_client.cc @@ -139,26 +139,22 @@ Dhcp6Client::Dhcp6Client(boost::shared_ptr& srv) : void Dhcp6Client::applyRcvdConfiguration(const Pkt6Ptr& reply, uint32_t state) { - typedef OptionCollection Opts; - // Get all options in the reply message and pick IA_NA, IA_PD and - // Status code. - Opts opts = reply->options_; - // Let's try to get a MAC HWAddrPtr hwaddr = reply->getMAC(HWAddr::HWADDR_SOURCE_ANY); - for (Opts::const_iterator opt = opts.begin(); opt != opts.end(); ++opt) { - Option6IAPtr ia = boost::dynamic_pointer_cast(opt->second); + // Get all options in the reply message and pick IA_NA, IA_PD and + // Status code. + for (const auto& opt : *reply->options_) { + Option6IAPtr ia = boost::dynamic_pointer_cast(opt.second); if (!ia) { // This is not IA, so let's just store it. - config_.options_.insert(*opt); + config_.options_.insert(opt); continue; } - const Opts& ia_opts = ia->getOptions(); - for (Opts::const_iterator iter_ia_opt = ia_opts.begin(); - iter_ia_opt != ia_opts.end(); ++iter_ia_opt) { - OptionPtr ia_opt = iter_ia_opt->second; + const auto& ia_opts = ia->getOptions(); + for (const auto& iter_ia_opt : ia_opts) { + OptionPtr ia_opt = iter_ia_opt.second; Lease6 lease; lease.type_ = (ia->getType() == D6O_IA_NA ? Lease::TYPE_NA : Lease::TYPE_PD); lease.iaid_ = ia->getIAID(); @@ -877,10 +873,8 @@ Dhcp6Client::getTeeTimes(const uint32_t iaid, uint32_t& t1, uint32_t& t2) const } // Get all options in the response message and pick IA_NA, IA_PD. - OptionCollection opts = context_.response_->options_; - - for (auto opt = opts.begin(); opt != opts.end(); ++opt) { - Option6IAPtr ia = boost::dynamic_pointer_cast(opt->second); + for (const auto& opt : *context_.response_->options_) { + Option6IAPtr ia = boost::dynamic_pointer_cast(opt.second); if (!ia) { // This is not IA, so let's just skip it. continue; diff --git a/src/bin/perfdhcp/perf_pkt4.cc b/src/bin/perfdhcp/perf_pkt4.cc index 0bceb82ba9..5c5e46bc15 100644 --- a/src/bin/perfdhcp/perf_pkt4.cc +++ b/src/bin/perfdhcp/perf_pkt4.cc @@ -31,7 +31,7 @@ bool PerfPkt4::rawPack() { return (PktTransform::pack(dhcp::Option::V4, data_, - options_, + *options_, getTransidOffset(), getTransid(), buffer_out_)); @@ -42,7 +42,7 @@ PerfPkt4::rawUnpack() { uint32_t transid = getTransid(); bool res = PktTransform::unpack(dhcp::Option::V4, data_, - options_, + *options_, getTransidOffset(), transid); if (res) { diff --git a/src/bin/perfdhcp/perf_pkt6.cc b/src/bin/perfdhcp/perf_pkt6.cc index 066d8ba516..948fbaf244 100644 --- a/src/bin/perfdhcp/perf_pkt6.cc +++ b/src/bin/perfdhcp/perf_pkt6.cc @@ -35,7 +35,7 @@ bool PerfPkt6::rawPack() { return (PktTransform::pack(dhcp::Option::V6, data_, - options_, + *options_, getTransidOffset(), getTransid(), buffer_out_)); @@ -46,7 +46,7 @@ PerfPkt6::rawUnpack() { uint32_t transid = getTransid(); bool res = PktTransform::unpack(dhcp::Option::V6, data_, - options_, + *options_, getTransidOffset(), transid); if (res) { diff --git a/src/bin/perfdhcp/test_control.cc b/src/bin/perfdhcp/test_control.cc index 78e4fb2fb7..51eada4d05 100644 --- a/src/bin/perfdhcp/test_control.cc +++ b/src/bin/perfdhcp/test_control.cc @@ -722,7 +722,7 @@ TestControl::printRate() const { std::cout <<"***Malformed Packets***" << std::endl << "Malformed packets: " << ExchangeStats::malformed_pkts_ - << std::endl; + << std::endl; } void @@ -861,24 +861,23 @@ TestControl::address6Uniqueness(const Pkt6Ptr& pkt6, ExchangeType xchg_type) { std::set current; // addresses were already checked in validateIA // we can safely assume that those are correct - for (OptionCollection::iterator opt = pkt6->options_.begin(); - opt != pkt6->options_.end(); ++opt) { - switch (opt->second->getType()) { + for (const auto& opt : *pkt6->options_) { + switch (opt.second->getType()) { case D6O_IA_PD: { // add address and check if it has not been already assigned // addresses should be unique cross options of the packet auto ret = current.emplace(boost::dynamic_pointer_cast< - Option6IAPrefix>(opt->second->getOption(D6O_IAPREFIX))->getAddress().toText()); + Option6IAPrefix>(opt.second->getOption(D6O_IAPREFIX))->getAddress().toText()); if (!ret.second) { stats_mgr_.updateNonUniqueAddrNum(xchg_type); } break; - } - case D6O_IA_NA: { + } + case D6O_IA_NA: { // add address and check if it has not been already assigned // addresses should be unique cross options of the packet auto ret = current.emplace(boost::dynamic_pointer_cast< - Option6IAAddr>(opt->second->getOption(D6O_IAADDR))->getAddress().toText()); + Option6IAAddr>(opt.second->getOption(D6O_IAADDR))->getAddress().toText()); if (!ret.second) { stats_mgr_.updateNonUniqueAddrNum(xchg_type); } diff --git a/src/lib/dhcp/option.h b/src/lib/dhcp/option.h index 720e4fd434..806d1d8711 100644 --- a/src/lib/dhcp/option.h +++ b/src/lib/dhcp/option.h @@ -38,6 +38,7 @@ typedef boost::shared_ptr