#include "util/log.h"
Data Structures | |
struct | delegpt |
Delegation Point. More... | |
struct | delegpt_ns |
Nameservers for a delegation point. More... | |
struct | delegpt_addr |
Address of target nameserver in delegation point. More... | |
Functions | |
struct delegpt * | delegpt_create (struct regional *regional) |
Create new delegation point. | |
struct delegpt * | delegpt_copy (struct delegpt *dp, struct regional *regional) |
Create a copy of a delegation point. | |
int | delegpt_set_name (struct delegpt *dp, struct regional *regional, uint8_t *name) |
Set name of delegation point. | |
int | delegpt_add_ns (struct delegpt *dp, struct regional *regional, uint8_t *name) |
Add a name to the delegation point. | |
int | delegpt_rrset_add_ns (struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *ns_rrset) |
Add NS rrset; calls add_ns repeatedly. | |
int | delegpt_add_target (struct delegpt *dp, struct regional *regional, uint8_t *name, size_t namelen, struct sockaddr_storage *addr, socklen_t addrlen) |
Add target address to the delegation point. | |
int | delegpt_add_rrset_A (struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset) |
Add A RRset to delegpt. | |
int | delegpt_add_rrset_AAAA (struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset) |
Add AAAA RRset to delegpt. | |
int | delegpt_add_rrset (struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset) |
Add any RRset to delegpt. | |
int | delegpt_add_addr (struct delegpt *dp, struct regional *regional, struct sockaddr_storage *addr, socklen_t addrlen) |
Add address to the delegation point. | |
struct delegpt_ns * | delegpt_find_ns (struct delegpt *dp, uint8_t *name, size_t namelen) |
Find NS record in name list of delegation point. | |
void | delegpt_log (enum verbosity_value v, struct delegpt *dp) |
Print the delegation point to the log. | |
void | delegpt_add_unused_targets (struct delegpt *dp) |
Add all usable targets to the result list. | |
size_t | delegpt_count_missing_targets (struct delegpt *dp) |
Count number of missing targets. | |
struct delegpt * | delegpt_from_message (struct dns_msg *msg, struct regional *regional) |
Create new delegation point from a dns message. |
It contains a list of name servers and their addresses if known.
Create new delegation point.
regional,: | where to allocate it. |
References regional_alloc().
Referenced by compile_time_root_prime(), delegpt_copy(), delegpt_from_message(), dns_cache_find_delegation(), read_forwards(), read_root_hints(), and read_stubs().
Create a copy of a delegation point.
dp,: | delegation point to copy. | |
regional,: | where to allocate it. |
References delegpt_addr::addr, delegpt_addr::addrlen, delegpt_add_addr(), delegpt_add_ns(), delegpt_create(), delegpt_set_name(), delegpt_ns::name, delegpt::name, delegpt_ns::next, delegpt_addr::next_target, delegpt::nslist, delegpt_ns::resolved, and delegpt::target_list.
Referenced by forward_request(), generate_target_query(), prime_root(), prime_stub(), and processInitRequest().
Set name of delegation point.
dp,: | delegation point. | |
regional,: | where to allocate the name copy. | |
name,: | name to use. |
References dname_count_size_labels(), delegpt::name, delegpt::namelabs, delegpt::namelen, and regional_alloc_init().
Referenced by compile_time_root_prime(), delegpt_copy(), delegpt_from_message(), dns_cache_find_delegation(), read_fwds_name(), read_root_hints(), and read_stubs_name().
Add a name to the delegation point.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
name,: | domain name in wire format. |
References delegpt_find_ns(), dname_count_size_labels(), delegpt_ns::name, delegpt_ns::namelen, delegpt_ns::next, delegpt::nslist, regional_alloc(), regional_alloc_init(), and delegpt_ns::resolved.
Referenced by ah(), delegpt_copy(), delegpt_rrset_add_ns(), processTargetResponse(), read_fwds_host(), read_root_hints(), and read_stubs_host().
int delegpt_rrset_add_ns | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
struct ub_packed_rrset_key * | ns_rrset | |||
) |
Add NS rrset; calls add_ns repeatedly.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
ns_rrset,: | NS rrset. return 0 on alloc error. |
References packed_rrset_data::count, lruhash_entry::data, delegpt_add_ns(), dname_valid(), ub_packed_rrset_key::entry, packed_rrset_data::rr_data, and packed_rrset_data::rr_len.
Referenced by delegpt_add_rrset(), delegpt_from_message(), and dns_cache_find_delegation().
int delegpt_add_target | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
uint8_t * | name, | |||
size_t | namelen, | |||
struct sockaddr_storage * | addr, | |||
socklen_t | addrlen | |||
) |
Add target address to the delegation point.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
name,: | name for which target was found (must be in nslist). This name is marked resolved. | |
namelen,: | length of name. | |
addr,: | the address. | |
addrlen,: | the length of addr. |
References delegpt_add_addr(), delegpt_find_ns(), and delegpt_ns::resolved.
Referenced by ah(), delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), and read_root_hints().
int delegpt_add_rrset_A | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
struct ub_packed_rrset_key * | rrset | |||
) |
Add A RRset to delegpt.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
rrset,: | RRset A to add. |
References packed_rrset_data::count, lruhash_entry::data, delegpt_add_target(), packed_rrset_key::dname, packed_rrset_key::dname_len, ub_packed_rrset_key::entry, INET_SIZE, ub_packed_rrset_key::rk, packed_rrset_data::rr_data, and packed_rrset_data::rr_len.
Referenced by cache_fill_missing(), delegpt_add_rrset(), delegpt_from_message(), and find_add_addrs().
int delegpt_add_rrset_AAAA | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
struct ub_packed_rrset_key * | rrset | |||
) |
Add AAAA RRset to delegpt.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
rrset,: | RRset AAAA to add. |
References packed_rrset_data::count, lruhash_entry::data, delegpt_add_target(), packed_rrset_key::dname, packed_rrset_key::dname_len, ub_packed_rrset_key::entry, INET6_SIZE, ub_packed_rrset_key::rk, packed_rrset_data::rr_data, and packed_rrset_data::rr_len.
Referenced by cache_fill_missing(), delegpt_add_rrset(), delegpt_from_message(), and find_add_addrs().
int delegpt_add_rrset | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
struct ub_packed_rrset_key * | rrset | |||
) |
Add any RRset to delegpt.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
rrset,: | RRset to add, NS, A, AAAA. |
References delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), delegpt_rrset_add_ns(), log_warn(), ub_packed_rrset_key::rk, and packed_rrset_key::type.
Referenced by processTargetResponse().
int delegpt_add_addr | ( | struct delegpt * | dp, | |
struct regional * | regional, | |||
struct sockaddr_storage * | addr, | |||
socklen_t | addrlen | |||
) |
Add address to the delegation point.
No servername is associated or checked.
dp,: | delegation point. | |
regional,: | where to allocate the info. | |
addr,: | the address. | |
addrlen,: | the length of addr. |
References delegpt_addr::addr, delegpt_addr::addrlen, delegpt_addr::attempts, delegpt_addr::next_result, delegpt_addr::next_target, delegpt_addr::next_usable, regional_alloc(), delegpt::target_list, and delegpt::usable_list.
Referenced by delegpt_add_target(), delegpt_copy(), read_fwds_addr(), and read_stubs_addr().
struct delegpt_ns* delegpt_find_ns | ( | struct delegpt * | dp, | |
uint8_t * | name, | |||
size_t | namelen | |||
) | [read] |
Find NS record in name list of delegation point.
dp,: | delegation point. | |
name,: | name of nameserver to look for, uncompressed wireformat. | |
namelen,: | length of name. |
References delegpt_ns::name, delegpt_ns::namelen, delegpt_ns::next, delegpt::nslist, and query_dname_compare().
Referenced by delegpt_add_ns(), delegpt_add_target(), error_supers(), iter_dp_is_useless(), and processTargetResponse().
void delegpt_log | ( | enum verbosity_value | v, | |
struct delegpt * | dp | |||
) |
Print the delegation point to the log.
For debugging.
v,: | verbosity value that is needed to emit to log. | |
dp,: | delegation point. |
References delegpt_addr::addr, delegpt_addr::addrlen, delegpt_count_addr(), delegpt_count_ns(), dname_str(), log_addr(), log_info(), delegpt_ns::name, delegpt::name, delegpt_ns::next, delegpt_addr::next_target, delegpt::nslist, delegpt_ns::resolved, delegpt::target_list, VERB_ALGO, and verbosity.
Referenced by error_supers(), prime_supers(), processInitRequest(), processQueryResponse(), processQueryTargets(), processTargetResponse(), read_forwards(), read_root_hints(), and read_stubs().
void delegpt_add_unused_targets | ( | struct delegpt * | dp | ) |
Add all usable targets to the result list.
dp,: | delegation point. |
References delegpt_addr::next_result, delegpt_addr::next_usable, delegpt::result_list, and delegpt::usable_list.
Referenced by processQueryTargets().
size_t delegpt_count_missing_targets | ( | struct delegpt * | dp | ) |
Count number of missing targets.
These are ns names with no resolved flag.
dp,: | delegation point. |
References delegpt_ns::next, delegpt::nslist, and delegpt_ns::resolved.
Referenced by processQueryTargets(), and query_for_targets().
Create new delegation point from a dns message.
Note that this method does not actually test to see if the message is an actual referral. It really is just checking to see if it can construct a delegation point, so the message could be of some other type (some ANSWER messages, some CNAME messages, generally.) Note that the resulting DelegationPoint will contain targets for all "relevant" glue (i.e., address records whose ownernames match the target of one of the NS records), so if policy dictates that some glue should be discarded beyond that, discard it before calling this method. Note that this method will find "glue" in either the ADDITIONAL section or the ANSWER section.
msg,: | the dns message, referral. | |
regional,: | where to allocate delegation point. |
References reply_info::an_numrrsets, delegpt_add_rrset_A(), delegpt_add_rrset_AAAA(), delegpt_create(), delegpt_rrset_add_ns(), delegpt_set_name(), packed_rrset_key::dname, find_NS(), reply_info::ns_numrrsets, dns_msg::rep, ub_packed_rrset_key::rk, reply_info::rrset_count, reply_info::rrsets, and packed_rrset_key::type.
Referenced by prime_supers(), and processQueryResponse().