RRset data. More...
#include <packed_rrset.h>
Data Fields | |
uint32_t | ttl |
TTL (in seconds like time()) of the rrset. | |
size_t | count |
number of rrs. | |
size_t | rrsig_count |
number of rrsigs, if 0 no rrsigs | |
enum rrset_trust | trust |
the trustworthiness of the rrset data | |
enum sec_status | security |
security status of the rrset data | |
size_t * | rr_len |
length of every rr's rdata, rr_len[i] is size of rr_data[i]. | |
uint32_t * | rr_ttl |
ttl of every rr. | |
uint8_t ** | rr_data |
Array of pointers to every rr's rdata. |
RRset data.
The data is packed, stored contiguously in memory. memory layout: o base struct o rr_len size_t array o rr_data uint8_t* array o rr_ttl uint32_t array (after size_t and ptrs because those may be 64bit and this array before those would make them unaligned). Since the stuff before is 32/64bit, rr_ttl is 32 bit aligned. o rr_data rdata wireformats o rrsig_data rdata wireformat(s)
Rdata is stored in wireformat. The dname is stored in wireformat. TTLs are stored as absolute values (and could be expired).
RRSIGs are stored in the arrays after the regular rrs.
You need the packed_rrset_key to know dname, type, class of the resource records in this RRset. (if signed the rrsig gives the type too).
On the wire an RR is: name, type, class, ttl, rdlength, rdata. So we need to send the following per RR: key.dname, ttl, rr_data[i]. since key.dname ends with type and class. and rr_data starts with the rdlength. the ttl value to send changes due to time.
uint32_t packed_rrset_data::ttl |
TTL (in seconds like time()) of the rrset.
Same for all RRs see rfc2181(5.2).
Referenced by adjust_ttl(), dump_rrset(), grab_nsec(), invalidateQueryInCache(), iter_suspect_exists(), key_entry_create_rrset(), key_ttl(), load_rrset(), lz_enter_rr_into_zone(), need_to_update_rrset(), packed_rrset_copy_region(), packed_rrset_heap_data(), packed_rrset_ttl_add(), parse_copy_decompress(), parse_rr_copy(), rdata_copy(), reply_info_set_ttls(), rrset_cache_lookup(), rrset_check_sec_status(), rrset_equal(), rrset_get_ttl(), rrset_msg(), rrset_update_sec_status(), synth_dname_msg(), ub_packed_rrset_ttl(), val_neg_dlvlookup(), val_verify_rrset(), and zone_del_rrset().
size_t packed_rrset_data::count |
number of rrs.
Referenced by add_item(), assemble_it(), canonical_sort(), delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), delegpt_rrset_add_ns(), dns_cache_find_delegation(), dump_rrset(), fill_res(), get_cname_target(), insert_rr(), invalidateQueryInCache(), key_entry_keysize(), key_matches_a_ds(), load_rrset(), move_into_cache(), nsec3_get_algo(), nsec3_get_iter(), nsec3_get_nextowner(), nsec3_get_salt(), nsec3_has_optout(), nsec3_has_type(), nsec3_known_algo(), nsec3_unknown_flags(), nsec_get_next(), nsec_has_type(), packed_rrset_copy_region(), packed_rrset_encode(), packed_rrset_heap_data(), packed_rrset_ptr_fixup(), packed_rrset_sizeof(), packed_rrset_to_rr_list(), packed_rrset_ttl_add(), parse_rr_copy(), reply_info_set_ttls(), rr_is_duplicate(), rrset_canonical(), rrset_equal(), rrset_get_count(), rrset_get_rdata(), rrset_get_sig_algo(), rrset_get_sig_keytag(), rrset_has_signer(), rrsetdata_equal(), synth_dname_msg(), torr(), val_find_best_signer(), val_find_rrset_signer(), val_rrset_wildcard(), val_verify_rrset(), and wipeout().
size_t* packed_rrset_data::rr_len |
length of every rr's rdata, rr_len[i] is size of rr_data[i].
Referenced by add_item(), assemble_it(), canonical_compare(), canonical_compare_byfield(), delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), delegpt_rrset_add_ns(), dnskey_get_keysize(), fill_res(), get_cname_target(), insert_rr(), kd_get_flags(), load_rr(), load_rrset(), move_into_cache(), nsec3_get_algo(), nsec3_get_iter(), nsec3_get_nextowner(), nsec3_get_salt(), nsec3_has_optout(), nsec3_has_type(), nsec3_known_algo(), nsec3_unknown_flags(), nsec_get_next(), nsec_has_type(), packed_rrset_encode(), packed_rrset_heap_data(), packed_rrset_ptr_fixup(), packed_rrset_sizeof(), parse_rr_copy(), rr_is_duplicate(), rrset_canonical(), rrset_equal(), rrset_get_rdata(), rrset_get_sig_algo(), rrset_get_sig_keytag(), rrset_has_signer(), rrsetdata_equal(), rrsig_get_labcount(), synth_dname_msg(), to_rr(), torr(), val_find_best_signer(), val_find_rrset_signer(), and wipeout().
uint32_t* packed_rrset_data::rr_ttl |
ttl of every rr.
rr_ttl[i] ttl of rr i.
Referenced by add_item(), assemble_it(), insert_rr(), invalidateQueryInCache(), load_rr(), load_rrset(), move_into_cache(), packed_rrset_copy_region(), packed_rrset_encode(), packed_rrset_heap_data(), packed_rrset_ptr_fixup(), packed_rrset_ttl_add(), parse_rr_copy(), reply_info_set_ttls(), rrset_check_sec_status(), rrset_equal(), rrset_update_sec_status(), synth_dname_msg(), to_rr(), torr(), and val_verify_rrset().
uint8_t** packed_rrset_data::rr_data |
Array of pointers to every rr's rdata.
The rr_data[i] rdata is stored in uncompressed wireformat. The first uint16_t of rr_data[i] is network format rdlength.
rr_data[count] to rr_data[count+rrsig_count] contain the rrsig data.
Referenced by add_item(), assemble_it(), canonical_compare(), canonical_compare_byfield(), delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), delegpt_rrset_add_ns(), dnskey_get_keysize(), fill_res(), get_cname_target(), insert_rr(), kd_get_flags(), load_rr(), load_rrset(), move_into_cache(), nsec3_get_algo(), nsec3_get_iter(), nsec3_get_nextowner(), nsec3_get_salt(), nsec3_has_optout(), nsec3_has_type(), nsec3_known_algo(), nsec3_unknown_flags(), nsec_get_next(), nsec_has_type(), packed_rrset_encode(), packed_rrset_heap_data(), packed_rrset_ptr_fixup(), packed_rrset_sizeof(), parse_rr_copy(), rr_is_duplicate(), rrset_canonical(), rrset_equal(), rrset_get_rdata(), rrset_get_sig_algo(), rrset_get_sig_keytag(), rrset_has_signer(), rrsetdata_equal(), rrsig_get_labcount(), synth_dname_msg(), to_rr(), torr(), val_find_best_signer(), val_find_rrset_signer(), and wipeout().