|
Electroneum
|
#include "util/storage/lruhash.h"

Go to the source code of this file.
Classes | |
| struct | packed_rrset_key |
| struct | ub_packed_rrset_key |
| struct | packed_rrset_data |
| struct | packed_rrset |
| struct | packed_rrset_list |
Macros | |
| #define | PACKED_RRSET_NSEC_AT_APEX 0x1 |
| #define | PACKED_RRSET_PARENT_SIDE 0x2 |
| #define | PACKED_RRSET_SOA_NEG 0x4 |
| #define | PACKED_RRSET_FIXEDTTL 0x80000000 |
| #define | RR_COUNT_MAX 0xffffff |
Typedefs | |
| typedef uint64_t | rrset_id_type |
This file contains the data storage for RRsets.
Definition in file packed_rrset.h.
| #define PACKED_RRSET_FIXEDTTL 0x80000000 |
This rrset is considered to have a fixed TTL; its TTL doesn't have to be updated on encoding in a reply. This flag is not expected to be set in cached data.
Definition at line 63 of file packed_rrset.h.
| #define PACKED_RRSET_NSEC_AT_APEX 0x1 |
this rrset is NSEC and is at zone apex (at child side of zonecut)
Definition at line 53 of file packed_rrset.h.
| #define PACKED_RRSET_PARENT_SIDE 0x2 |
this rrset is A/AAAA and is in-zone-glue (from parent side of zonecut)
Definition at line 55 of file packed_rrset.h.
| #define PACKED_RRSET_SOA_NEG 0x4 |
this rrset is SOA and has the negative ttl (from nxdomain or nodata), this is set on SOA rrsets in the authority section, to keep its TTL separate from the SOA in the answer section from a direct SOA query or ANY query.
Definition at line 59 of file packed_rrset.h.
| #define RR_COUNT_MAX 0xffffff |
number of rrs and rrsets for integer overflow protection. More than this is not really possible (64K packet has much less RRs and RRsets) in a message. And this is small enough that also multiplied there is no integer overflow.
Definition at line 69 of file packed_rrset.h.
| typedef uint64_t rrset_id_type |
type used to uniquely identify rrsets. Cannot be reused without clearing the cache.
Definition at line 46 of file packed_rrset.h.
| 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.
Definition at line 140 of file packed_rrset.h.
| enum sec_status |
Security status from validation for data. The order is significant; more secure, more proven later.
Definition at line 176 of file packed_rrset.h.
| 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. |
| void log_packed_rrset | ( | enum verbosity_value | v, |
| const char * | str, | ||
| struct ub_packed_rrset_key * | rrset | ||
| ) |
Print the string with prefix, one rr per line.
| v | at what verbosity level to print this. |
| str | string of message. |
| rrset | with name, and rdata, and rrsigs. |
| void log_rrset_key | ( | enum verbosity_value | v, |
| const char * | str, | ||
| struct ub_packed_rrset_key * | rrset | ||
| ) |
Print string with neat domain name, type, class from rrset.
| v | at what verbosity level to print this. |
| str | string of message. |
| rrset | structure with name, type and class. |
| int packed_rr_to_string | ( | struct ub_packed_rrset_key * | rrset, |
| size_t | i, | ||
| time_t | now, | ||
| char * | dest, | ||
| size_t | dest_len | ||
| ) |
Convert RR from RRset to string.
| rrset | structure with data. |
| i | index of rr or RRSIG. |
| now | time that is subtracted from ttl before printout. Can be 0. |
| dest | destination string buffer. Must be nonNULL. |
| dest_len | length of dest buffer (>0). |
| struct ub_packed_rrset_key* packed_rrset_copy_alloc | ( | struct ub_packed_rrset_key * | key, |
| struct alloc_cache * | alloc, | ||
| time_t | now | ||
| ) |
Allocate rrset with malloc (from region or you are holding the lock).
| key | key with data entry. |
| alloc | alloc_cache to create rrset_keys |
| now | adjust the TTLs to be absolute (add to all TTLs). |
| struct ub_packed_rrset_key* packed_rrset_copy_region | ( | struct ub_packed_rrset_key * | key, |
| struct regional * | region, | ||
| time_t | now | ||
| ) |
Allocate rrset in region - no more locks needed
| 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). |
| 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. |
| 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. |
| void packed_rrset_ttl_add | ( | struct packed_rrset_data * | data, |
| time_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. |
| void rrset_data_delete | ( | void * | data, |
| void * | userdata | ||
| ) |
Old data to be deleted.
| data | what to delete. |
| userdata | user data ptr. |
| hashvalue_type 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. |
| const char* rrset_trust_to_string | ( | enum rrset_trust | s | ) |
Get a printable string for a rrset trust value
| s | rrset trust value |
| 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. |
| const char* sec_status_to_string | ( | enum sec_status | s | ) |
Get a printable string for a security status value
| s | security status |
| 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. |
| time_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. |
| int ub_rrset_compare | ( | void * | k1, |
| void * | k2 | ||
| ) |
compares two rrset keys.
| k1 | struct ub_packed_rrset_key*. |
| k2 | struct ub_packed_rrset_key*. |
| 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. |
| 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*. |