INSIST(result == ISC_R_SUCCESS);
prefetch_trigger = cfg_tuple_get(obj, "trigger");
view->prefetch_trigger = cfg_obj_asuint32(prefetch_trigger);
- if (view->prefetch_trigger > 10) {
- view->prefetch_trigger = 10;
- }
prefetch_eligible = cfg_tuple_get(obj, "eligible");
- if (cfg_obj_isvoid(prefetch_eligible)) {
- int m;
- for (m = 1; maps[m] != NULL; m++) {
- obj = NULL;
- result = named_config_get(&maps[m], "prefetch", &obj);
- INSIST(result == ISC_R_SUCCESS);
- prefetch_eligible = cfg_tuple_get(obj, "eligible");
- if (cfg_obj_isuint32(prefetch_eligible)) {
- break;
- }
- }
- INSIST(cfg_obj_isuint32(prefetch_eligible));
- }
view->prefetch_eligible = cfg_obj_asuint32(prefetch_eligible);
- if (view->prefetch_eligible < view->prefetch_trigger + 6) {
- view->prefetch_eligible = view->prefetch_trigger + 6;
- }
/*
* For now, there is only one kind of trusted keys, the
staleanswerclienttimeout_enums
};
+static void
+prefetch_merge(cfg_obj_t *effectiveobj, const cfg_obj_t *defaultobj) {
+ cfg_obj_t *trigger = NULL;
+ cfg_obj_t *eligible = NULL;
+
+ trigger = (cfg_obj_t *)cfg_tuple_get(effectiveobj, "trigger");
+ INSIST(cfg_obj_isuint32(trigger));
+ if (cfg_obj_asuint32(trigger) > 10) {
+ trigger->value.uint32 = 10;
+ }
+
+ eligible = (cfg_obj_t *)cfg_tuple_get(effectiveobj, "eligible");
+ if (cfg_obj_isvoid(eligible)) {
+ const cfg_obj_t *defaulteligible = NULL;
+
+ defaulteligible = cfg_tuple_get(defaultobj, "eligible");
+ INSIST(cfg_obj_isuint32(defaulteligible));
+
+ eligible->value.uint32 = cfg_obj_asuint32(defaulteligible);
+ eligible->type = &cfg_type_uint32;
+ }
+
+ INSIST(cfg_obj_isuint32(eligible));
+ if (cfg_obj_asuint32(eligible) < cfg_obj_asuint32(trigger) + 6) {
+ eligible->value.uint32 = cfg_obj_asuint32(trigger) + 6;
+ }
+}
+
/*%
* Clauses that can be found within the 'view' statement,
* with defaults in the 'options' statement.
{ "nta-recheck", &cfg_type_duration, 0 },
{ "nxdomain-redirect", &cfg_type_astring, 0 },
{ "preferred-glue", &cfg_type_astring, 0 },
- { "prefetch", &cfg_type_prefetch, 0 },
+ { "prefetch", &cfg_type_prefetch, 0, prefetch_merge },
{ "provide-ixfr", &cfg_type_boolean, 0 },
{ "qname-minimization", &cfg_type_qminmethod, 0 },
/*