#include "util/storage/lruhash.h"
Data Structures | |
struct | packed_rrset_key |
The identifying information for an RRset. More... | |
struct | ub_packed_rrset_key |
This structure contains an RRset. More... | |
struct | packed_rrset_data |
RRset data. More... | |
struct | packed_rrset |
An RRset can be represented using both key and data together. More... | |
struct | packed_rrset_list |
list of packed rrsets More... | |
Defines | |
#define | PACKED_RRSET_NSEC_AT_APEX 0x1 |
this rrset is NSEC and is at zone apex (at child side of zonecut) | |
Typedefs | |
typedef uint64_t | rrset_id_t |
type used to uniquely identify rrsets. | |
Enumerations | |
enum | rrset_trust { rrset_trust_none = 0, rrset_trust_add_noAA, rrset_trust_auth_noAA, rrset_trust_add_AA, rrset_trust_nonauth_ans_AA, rrset_trust_ans_noAA, rrset_trust_glue, rrset_trust_auth_AA, rrset_trust_ans_AA, rrset_trust_sec_noglue, rrset_trust_prim_noglue, rrset_trust_validated, rrset_trust_ultimate } |
RRset trustworthiness. More... | |
enum | sec_status { sec_status_unchecked = 0, sec_status_bogus, sec_status_indeterminate, sec_status_insecure, sec_status_secure } |
Security status from validation for data. More... | |
Functions | |
void | ub_packed_rrset_parsedelete (struct ub_packed_rrset_key *pkey, struct alloc_cache *alloc) |
Delete packed rrset key and data, not entered in hashtables yet. | |
size_t | packed_rrset_sizeof (struct packed_rrset_data *data) |
Memory size of rrset data. | |
uint32_t | ub_packed_rrset_ttl (struct ub_packed_rrset_key *key) |
Get TTL of rrset. | |
size_t | ub_rrset_sizefunc (void *key, void *data) |
Calculate memory size of rrset entry. | |
int | ub_rrset_compare (void *k1, void *k2) |
compares two rrset keys. | |
int | rrsetdata_equal (struct packed_rrset_data *d1, struct packed_rrset_data *d2) |
compare two rrset data structures. | |
void | ub_rrset_key_delete (void *key, void *userdata) |
Old key to be deleted. | |
void | rrset_data_delete (void *data, void *userdata) |
Old data to be deleted. | |
hashvalue_t | rrset_key_hash (struct packed_rrset_key *key) |
Calculate hash value for a packed rrset key. | |
void | packed_rrset_ptr_fixup (struct packed_rrset_data *data) |
Fixup pointers in fixed data packed_rrset_data blob. | |
void | packed_rrset_ttl_add (struct packed_rrset_data *data, uint32_t add) |
Fixup TTLs in fixed data packed_rrset_data blob. | |
void | get_cname_target (struct ub_packed_rrset_key *rrset, uint8_t **dname, size_t *dname_len) |
Utility procedure to extract CNAME target name from its rdata. | |
const char * | rrset_trust_to_string (enum rrset_trust s) |
Get a printable string for a rrset trust value. | |
const char * | sec_status_to_string (enum sec_status s) |
Get a printable string for a security status value. |
typedef uint64_t rrset_id_t |
type used to uniquely identify rrsets.
Cannot be reused without clearing the cache.
enum rrset_trust |
RRset trustworthiness.
Bigger value is more trust. RFC 2181. The rrset_trust_add_noAA, rrset_trust_auth_noAA, rrset_trust_add_AA, are mentioned as the same trustworthiness in 2181, but split up here for ease of processing.
rrset_trust_nonauth_ans_AA, rrset_trust_ans_noAA are also mentioned as the same trustworthiness in 2181, but split up here for ease of processing.
Added trust_none for a sane initial value, smaller than anything else. Added validated and ultimate trust for keys and rrsig validated content.
enum sec_status |
Security status from validation for data.
The order is significant; more secure, more proven later.
void ub_packed_rrset_parsedelete | ( | struct ub_packed_rrset_key * | pkey, | |
struct alloc_cache * | alloc | |||
) |
Delete packed rrset key and data, not entered in hashtables yet.
Used during parsing.
pkey,: | rrset key structure with locks, key and data pointers. | |
alloc,: | where to return the unfree-able key structure. |
References alloc_special_release(), lruhash_entry::data, packed_rrset_key::dname, ub_packed_rrset_key::entry, ub_packed_rrset_key::id, and ub_packed_rrset_key::rk.
Referenced by reply_info_parsedelete(), rrset_cache_update(), and verifytest_file().
size_t packed_rrset_sizeof | ( | struct packed_rrset_data * | data | ) |
Memory size of rrset data.
RRset data must be filled in correctly.
data,: | data to examine. |
References packed_rrset_data::count, log_assert, packed_rrset_data::rr_data, packed_rrset_data::rr_len, and packed_rrset_data::rrsig_count.
Referenced by copy_rrset(), key_entry_copy(), key_entry_copy_toregion(), key_entry_create_rrset(), key_entry_get_rrset(), key_entry_sizefunc(), repinfo_copy_rrsets(), and ub_rrset_sizefunc().
uint32_t ub_packed_rrset_ttl | ( | struct ub_packed_rrset_key * | key | ) |
Get TTL of rrset.
RRset data must be filled in correctly.
key,: | rrset key, with data to examine. |
References packed_rrset_data::ttl.
Referenced by ds_response_to_ke(), and val_nsec_prove_nodata_dsreply().
size_t ub_rrset_sizefunc | ( | void * | key, | |
void * | data | |||
) |
Calculate memory size of rrset entry.
For hash table usage.
key,: | struct ub_packed_rrset_key*. | |
data,: | struct packed_rrset_data*. |
References ub_packed_rrset_key::entry, lruhash_entry::lock, and packed_rrset_sizeof().
Referenced by fptr_whitelist_hash_sizefunc(), and rrset_cache_create().
int ub_rrset_compare | ( | void * | k1, | |
void * | k2 | |||
) |
compares two rrset keys.
k1,: | struct ub_packed_rrset_key*. | |
k2,: | struct ub_packed_rrset_key*. |
References packed_rrset_key::dname, packed_rrset_key::dname_len, packed_rrset_key::flags, query_dname_compare(), ub_packed_rrset_key::rk, packed_rrset_key::rrset_class, and packed_rrset_key::type.
Referenced by fptr_whitelist_hash_compfunc(), and rrset_cache_create().
int rrsetdata_equal | ( | struct packed_rrset_data * | d1, | |
struct packed_rrset_data * | d2 | |||
) |
compare two rrset data structures.
Compared rdata and rrsigdata, not the trust or ttl value.
d1,: | data to compare. | |
d2,: | data to compare. |
References packed_rrset_data::count, packed_rrset_data::rr_data, packed_rrset_data::rr_len, and packed_rrset_data::rrsig_count.
Referenced by rrset_cache_update(), rrset_check_sec_status(), and rrset_update_sec_status().
void ub_rrset_key_delete | ( | void * | key, | |
void * | userdata | |||
) |
Old key to be deleted.
RRset keys are recycled via alloc. The id is set to 0. So that other threads, after acquiring a lock always get the correct value, in this case the 0 deleted-special value.
key,: | struct ub_packed_rrset_key*. | |
userdata,: | alloc structure to use for recycling. |
References alloc_special_release(), packed_rrset_key::dname, ub_packed_rrset_key::id, and ub_packed_rrset_key::rk.
Referenced by fptr_whitelist_hash_delkeyfunc(), and rrset_cache_create().
void rrset_data_delete | ( | void * | data, | |
void * | userdata | |||
) |
Old data to be deleted.
data,: | what to delete. | |
userdata,: | user data ptr. |
Referenced by fptr_whitelist_hash_deldatafunc(), and rrset_cache_create().
hashvalue_t rrset_key_hash | ( | struct packed_rrset_key * | key | ) |
Calculate hash value for a packed rrset key.
key,: | the rrset key with name, type, class, flags. |
References packed_rrset_key::dname, dname_query_hash(), packed_rrset_key::flags, packed_rrset_key::rrset_class, and packed_rrset_key::type.
Referenced by rrset_cache_lookup(), rrset_check_sec_status(), rrset_update_sec_status(), and synth_dname_msg().
void packed_rrset_ptr_fixup | ( | struct packed_rrset_data * | data | ) |
Fixup pointers in fixed data packed_rrset_data blob.
After a memcpy of the data for example. Will set internal pointers right.
data,: | rrset data structure. Otherwise correctly filled in. |
References packed_rrset_data::count, packed_rrset_data::rr_data, packed_rrset_data::rr_len, packed_rrset_data::rr_ttl, and packed_rrset_data::rrsig_count.
Referenced by copy_rrset(), key_entry_copy(), key_entry_copy_toregion(), key_entry_create_rrset(), key_entry_get_rrset(), repinfo_copy_rrsets(), and synth_dname_msg().
void packed_rrset_ttl_add | ( | struct packed_rrset_data * | data, | |
uint32_t | add | |||
) |
Fixup TTLs in fixed data packed_rrset_data blob.
data,: | rrset data structure. Otherwise correctly filled in. | |
add,: | how many seconds to add, pass time(0) for example. |
References packed_rrset_data::count, packed_rrset_data::rr_ttl, packed_rrset_data::rrsig_count, and packed_rrset_data::ttl.
Referenced by dns_cache_store(), and store_rrset().
void get_cname_target | ( | struct ub_packed_rrset_key * | rrset, | |
uint8_t ** | dname, | |||
size_t * | dname_len | |||
) |
Utility procedure to extract CNAME target name from its rdata.
Failsafes; it will change passed dname to a valid dname or do nothing.
rrset,: | the rrset structure. Must be a CNAME. Only first RR is used (multiple RRs are technically illegal anyway). Also works on type DNAME. Returns target name. | |
dname,: | this pointer is updated to point into the cname rdata. If a failsafe fails, nothing happens to the pointer (such as the rdata was not a valid dname, not a CNAME, ...). | |
dname_len,: | length of dname is returned. |
References packed_rrset_data::count, lruhash_entry::data, dname_valid(), ub_packed_rrset_key::entry, ub_packed_rrset_key::rk, packed_rrset_data::rr_data, packed_rrset_data::rr_len, and packed_rrset_key::type.
Referenced by check_cache_chain(), handle_cname_response(), reply_find_answer_rrset(), reply_find_final_cname_target(), response_type_from_cache(), response_type_from_server(), synth_dname_msg(), and val_chase_cname().
const char* rrset_trust_to_string | ( | enum rrset_trust | s | ) |
Get a printable string for a rrset trust value.
s,: | rrset trust value |
References rrset_trust_add_AA, rrset_trust_add_noAA, rrset_trust_ans_AA, rrset_trust_ans_noAA, rrset_trust_auth_AA, rrset_trust_auth_noAA, rrset_trust_glue, rrset_trust_nonauth_ans_AA, rrset_trust_none, rrset_trust_prim_noglue, rrset_trust_sec_noglue, rrset_trust_ultimate, and rrset_trust_validated.
const char* sec_status_to_string | ( | enum sec_status | s | ) |
Get a printable string for a security status value.
s,: | security status |
References sec_status_bogus, sec_status_indeterminate, sec_status_insecure, sec_status_secure, and sec_status_unchecked.
Referenced by primeResponseToKE(), processValidate(), val_verify_rrset(), validate_nameerror_response(), validate_referral_response(), and verifytest_rrset().