RFC 1995 specifies incremental zone transfer: requestor sends a query with authority = their SOA. Server replies with either:
Refused (or whatever) if not supported
Empty if requested SOA is newer or equal to current (Empty is "single SOA in answer")
Full (same as AXFR) if diff between requested SOA and current SOA cannot be computed (i.e. requested SOA is no more in cache)
Difference lists of the form: CURR_SOA .. lists .. CURR_SOA, where each elemen in lists is: OLD_SOA DELETE_RRs NEW_SOA ADD_RRs.
This implementation already condenses the difference lists to a single old_soa to_delete to_add (of type Name_rr_map.t), which is the "condensed" list.
Primary server answers (authenticated!) IXFR (over TCP only!), secondary attempts IXFR if there is already a SOA present for the zone (otherwise falls back to AXFR). If IXFR returns a Rcode (!= NotAuth - in which case the zone is dropped), AXFR is attempted instead.
RFC 1995 specifies incremental zone transfer: requestor sends a query with authority = their SOA. Server replies with either:
This implementation already condenses the difference lists to a single old_soa to_delete to_add (of type Name_rr_map.t), which is the "condensed" list.
Primary server answers (authenticated!) IXFR (over TCP only!), secondary attempts IXFR if there is already a SOA present for the zone (otherwise falls back to AXFR). If IXFR returns a Rcode (!= NotAuth - in which case the zone is dropped), AXFR is attempted instead.