packed_rrset.h File Reference

This file contains the data storage for RRsets. More...

#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.
struct ub_packed_rrset_keypacked_rrset_copy_region (struct ub_packed_rrset_key *key, struct regional *region, uint32_t now)
 Allocate rrset in region - no more locks needed.


Detailed Description

This file contains the data storage for RRsets.


Typedef Documentation

typedef uint64_t rrset_id_t

type used to uniquely identify rrsets.

Cannot be reused without clearing the cache.


Enumeration Type Documentation

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.

Enumerator:
rrset_trust_none  initial value for trust
rrset_trust_add_noAA  Additional information from non-authoritative answers.
rrset_trust_auth_noAA  Data from the authority section of a non-authoritative answer.
rrset_trust_add_AA  Additional information from an authoritative answer.
rrset_trust_nonauth_ans_AA  non-authoritative data from the answer section of authoritative answers
rrset_trust_ans_noAA  Data from the answer section of a non-authoritative answer.
rrset_trust_glue  Glue from a primary zone, or glue from a zone transfer.
rrset_trust_auth_AA  Data from the authority section of an authoritative answer.
rrset_trust_ans_AA  The authoritative data included in the answer section of an authoritative reply.
rrset_trust_sec_noglue  Data from a zone transfer, other than glue.
rrset_trust_prim_noglue  Data from a primary zone file, other than glue data.
rrset_trust_validated  DNSSEC(rfc4034) validated with trusted keys.
rrset_trust_ultimate  ultimately trusted, no more trust is possible; trusted keys from the unbound configuration setup.

enum sec_status

Security status from validation for data.

The order is significant; more secure, more proven later.

Enumerator:
sec_status_unchecked  UNCHECKED means that object has yet to be validated.

sec_status_bogus  BOGUS means that the object (RRset or message) failed to validate (according to local policy), but should have validated.

sec_status_indeterminate  INDETERMINATE means that the object is insecure, but not authoritatively so.

Generally this means that the RRset is not below a configured trust anchor.

sec_status_insecure  INSECURE means that the object is authoritatively known to be insecure.

Generally this means that this RRset is below a trust anchor, but also below a verified, insecure delegation.

sec_status_secure  SECURE means that the object (RRset or message) validated according to local policy.


Function Documentation

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.

Parameters:
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 move_into_cache(), reply_info_parsedelete(), rrset_cache_update(), and verifytest_file().

size_t packed_rrset_sizeof ( struct packed_rrset_data data  ) 

uint32_t ub_packed_rrset_ttl ( struct ub_packed_rrset_key key  ) 

Get TTL of rrset.

RRset data must be filled in correctly.

Parameters:
key,: rrset key, with data to examine.
Returns:
ttl value.

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.

Parameters:
key,: struct ub_packed_rrset_key*.
data,: struct packed_rrset_data*.
Returns:
size in bytes.

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.

Parameters:
k1,: struct ub_packed_rrset_key*.
k2,: struct ub_packed_rrset_key*.
Returns:
0 if equal.

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.

Parameters:
d1,: data to compare.
d2,: data to compare.
Returns:
1 if equal.

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.

Parameters:
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.

Parameters:
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.

Parameters:
key,: the rrset key with name, type, class, flags.
Returns:
hash value.

References packed_rrset_key::dname, dname_query_hash(), packed_rrset_key::flags, packed_rrset_key::rrset_class, and packed_rrset_key::type.

Referenced by move_into_cache(), rrset_cache_lookup(), rrset_cache_remove(), 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.

Parameters:
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 key_entry_copy(), key_entry_copy_toregion(), key_entry_create_rrset(), key_entry_get_rrset(), move_into_cache(), packed_rrset_copy_region(), process_dlv_response(), 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.

Parameters:
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.

Parameters:
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 handle_cname_response(), reply_check_cname_chain(), 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  ) 

const char* sec_status_to_string ( enum sec_status  s  ) 

struct ub_packed_rrset_key* packed_rrset_copy_region ( struct ub_packed_rrset_key key,
struct regional region,
uint32_t  now 
) [read]

Allocate rrset in region - no more locks needed.

Parameters:
key,: a (just from rrset cache looked up) rrset key + valid, packed data record.
region,: where to alloc the copy
now,: adjust the TTLs to be relative (subtract from all TTLs).
Returns:
new region-alloced rrset key or NULL on alloc failure.

References packed_rrset_data::count, lruhash_entry::data, packed_rrset_key::dname, packed_rrset_key::dname_len, ub_packed_rrset_key::entry, lruhash_entry::hash, ub_packed_rrset_key::id, lruhash_entry::key, packed_rrset_ptr_fixup(), packed_rrset_sizeof(), regional_alloc(), regional_alloc_init(), ub_packed_rrset_key::rk, packed_rrset_data::rr_ttl, packed_rrset_data::rrsig_count, and packed_rrset_data::ttl.

Referenced by addr_to_additional(), dns_msg_authadd(), find_add_ds(), grab_nsec(), load_ref(), rrset_msg(), synth_dname_msg(), and tomsg().


Generated on Tue Oct 13 06:45:51 2009 for unbound by  doxygen 1.5.9