- Integer
- Default: 0 (disabled)
-The minumum TTL for an ECS-specific answer to be inserted into the query cache. This condition applies in conjunction with ``ecs-ipv4-cache-bits`` or ``ecs-ipv6-cache-bits``.
+The minimum TTL for an ECS-specific answer to be inserted into the query cache. This condition applies in conjunction with ``ecs-ipv4-cache-bits`` or ``ecs-ipv6-cache-bits``.
That is, only if both the limits apply, the record will not be cached.
.. _setting-ecs-scope-zero-address:
BOOST_CHECK_EQUAL(res, RCode::NoError);
BOOST_CHECK_EQUAL(ret.size(), 1);
- /* should have been cached because /24 is more specific than /16 but TTL limit is nof efective */
+ /* should have been cached because /24 is more specific than /16 but TTL limit is nof effective */
const ComboAddress who("192.0.2.128");
vector<DNSRecord> cached;
BOOST_REQUIRE_GT(t_RC->get(now, target, QType(QType::A), true, &cached, who), 0);
*/
if (i->first.type != QType::NSEC3 && (i->first.type == QType::DS || i->first.type == QType::NS || i->first.type == QType::A || i->first.type == QType::AAAA || isAA || wasForwardRecurse)) {
- bool doCache = i->first.place != DNSResourceRecord::ANSWER || !ednsmask;
- // if ednsmask is relevant, we do not want to cache if the scope > ecslimit and TTL < limitttl
- if (!doCache && ednsmask) {
- bool manyMaskBits = (ednsmask->isIpv4() && ednsmask->getBits() > SyncRes::s_ecsipv4cachelimit) ||
+ bool doCache = true;
+ if (i->first.place == DNSResourceRecord::ANSWER && ednsmask) {
+ // If ednsmask is relevant, we do not want to cache if the scope prefix length is large and TTL is small
+ if (SyncRes::s_ecscachelimitttl > 0) {
+ bool manyMaskBits = (ednsmask->isIpv4() && ednsmask->getBits() > SyncRes::s_ecsipv4cachelimit) ||
(ednsmask->isIpv6() && ednsmask->getBits() > SyncRes::s_ecsipv6cachelimit);
- doCache = true;
- if (SyncRes::s_ecscachelimitttl > 0) {
if (manyMaskBits) {
uint32_t minttl = UINT32_MAX;
for (const auto &it : i->second.records) {