parent: remote_id | remotes_id ...
check\-interval: TIME
timeout: TIME
+ parent\-delay: TIME
.ft P
.fi
.UNINDENT
Set to 0 for infinity.
.sp
\fIDefault:\fP 0
+.SS parent\-delay
+.sp
+After successful parent DS check, wait for this period before continuing the next
+key roll\-over step. This delay shall cover the propagation delay of update in the
+parent zone.
+.sp
+\fIDefault:\fP 0
.SH POLICY SECTION
.sp
DNSSEC policy configuration.
parent: remote_id | remotes_id ...
check-interval: TIME
timeout: TIME
+ parent-delay: TIME
.. _submission_id:
*Default:* 0
+.. _submission_parent-delay:
+
+parent-delay
+------------
+
+After successful parent DS check, wait for this period before continuing the next
+key roll-over step. This delay shall cover the propagation delay of update in the
+parent zone.
+
+*Default:* 0
+
.. _Policy section:
Policy section
CONF_IO_FRLD_ZONES },
{ C_TIMEOUT, YP_TINT, YP_VINT = { 0, UINT32_MAX, 0, YP_STIME },
CONF_IO_FRLD_ZONES },
+ { C_PARENT_DELAY, YP_TINT, YP_VINT = { 0, UINT32_MAX, 0, YP_STIME },
+ CONF_IO_FRLD_ZONES },
{ C_COMMENT, YP_TSTR, YP_VNONE },
{ NULL }
};
#define C_NSID "\x04""nsid"
#define C_OFFLINE_KSK "\x0B""offline-ksk"
#define C_PARENT "\x06""parent"
+#define C_PARENT_DELAY "\x0C""parent-delay"
#define C_PIDFILE "\x07""pidfile"
#define C_POLICY "\x06""policy"
#define C_PROPAG_DELAY "\x11""propagation-delay"
}
conf_mix_iter_next(&iter);
}
+
+ val = conf_id_get(conf, C_SBM, C_PARENT_DELAY, &ksk_sbm);
+ policy->ksk_sbm_delay = conf_int(&val);
}
val = conf_id_get(conf, C_POLICY, C_SIGNING_THREADS, id);
if (key->is_ready && !key->is_pub_only) {
assert(key->is_ksk);
if (parents_have_ds(kctx, key, timeout, &max_ds_ttl)) {
- return knot_dnssec_ksk_sbm_confirm(kctx, max_ds_ttl);
+ return knot_dnssec_ksk_sbm_confirm(kctx, max_ds_ttl + kctx->policy->ksk_sbm_delay);
} else {
return KNOT_ENOENT;
}
// various
uint32_t ksk_sbm_timeout; // like knot_time_t
uint32_t ksk_sbm_check_interval; // like knot_time_t
+ uint32_t ksk_sbm_delay;
unsigned cds_cdnskey_publish;
dnssec_key_digest_t cds_dt; // digest type for CDS
parent_dynarray_t parents;
check_zone(server, zone, slave, before_keys + after_keys, 2, 1, 2, msg)
msg = desc + ": post active"
- wait_for_count(t, server, "DNSKEY", after_keys, 5, 20, msg)
+ wait_for_count(t, server, "DNSKEY", after_keys, 11, 26, msg)
check_zone(server, zone, slave, after_keys, 1, 1, 2, msg)
msg = desc + ": old alg removed"
check_zone(server, zone, slave, total_keys, 2, 1, 1, msg)
# else skip the test as we have no control on KSK and ZSK retiring asynchronously
- t.sleep(5) # cca DS TTL
+ t.sleep(11) # cca DS TTL + parent-delay
wait_for_count(t, server, "SOA", 1, 0, 1, "NOOP")
msg = desc + ": old key removed"
child.dnssec(child_zone).propagation_delay = 11
child.dnssec(child_zone).ksk_sbm_check = [ parent ]
child.dnssec(child_zone).ksk_sbm_check_interval = 2
+child.dnssec(child_zone).ksk_sbm_delay = 6
child.dnssec(child_zone).ksk_shared = True
child.dnssec(child_zone).cds_publish = "always"
if DOUBLE_DS:
self.ksk_sbm_check = []
self.ksk_sbm_check_interval = None
self.ksk_sbm_timeout = None
+ self.ksk_sbm_delay = None
self.ds_push = None
self.ksk_shared = None
self.shared_policy_with = None
self._str(s, "check-interval", z.dnssec.ksk_sbm_check_interval)
if z.dnssec.ksk_sbm_timeout is not None:
self._str(s, "timeout", z.dnssec.ksk_sbm_timeout)
+ if z.dnssec.ksk_sbm_delay is not None:
+ self._str(s, "parent-delay", z.dnssec.ksk_sbm_delay)
if have_sbm:
s.end()