FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
dns.h File Reference
+ Include dependency graph for dns.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dns_pending_request_t
 
struct  dns_resolve_name_t
 
struct  dns_cache_entry_t
 
struct  dns_main_t
 

Macros

#define DNS_CACHE_ENTRY_FLAG_VALID   (1<<0)
 we have Actual Data More...
 
#define DNS_CACHE_ENTRY_FLAG_STATIC   (1<<1)
 static entry More...
 
#define DNS_CACHE_ENTRY_FLAG_CNAME   (1<<2)
 CNAME (indirect) entry. More...
 
#define DNS_RETRIES_PER_SERVER   3
 
#define DNS_RESOLVER_EVENT_RESOLVED   1
 
#define DNS_RESOLVER_EVENT_PENDING   2
 
#define foreach_dns46_request_error
 
#define foreach_dns46_reply_error
 

Enumerations

enum  dns_pending_request_type_t { DNS_API_PENDING_NAME_TO_IP = 1, DNS_API_PENDING_IP_TO_NAME, DNS_PEER_PENDING_NAME_TO_IP, DNS_PEER_PENDING_IP_TO_NAME }
 
enum  dns46_request_error_t { DNS46_REQUEST_N_ERROR }
 
enum  dns46_reply_error_t { DNS46_REPLY_N_ERROR }
 

Functions

void vnet_send_dns_request (vlib_main_t *vm, dns_main_t *dm, dns_cache_entry_t *ep)
 
int vnet_dns_cname_indirection_nolock (vlib_main_t *vm, dns_main_t *dm, u32 ep_index, u8 *reply)
 Handle cname indirection. More...
 
int vnet_dns_delete_entry_by_index_nolock (dns_main_t *dm, u32 index)
 
int vnet_dns_resolve_name (vlib_main_t *vm, dns_main_t *dm, u8 *name, dns_pending_request_t *t, dns_cache_entry_t **retp)
 
void vnet_dns_send_dns6_request (vlib_main_t *vm, dns_main_t *dm, dns_cache_entry_t *ep, ip6_address_t *server)
 
void vnet_dns_send_dns4_request (vlib_main_t *vm, dns_main_t *dm, dns_cache_entry_t *ep, ip4_address_t *server)
 
void vnet_send_dns4_reply (vlib_main_t *vm, dns_main_t *dm, dns_pending_request_t *t, dns_cache_entry_t *ep, vlib_buffer_t *b0)
 
void vnet_send_dns6_reply (vlib_main_t *vm, dns_main_t *dm, dns_pending_request_t *t, dns_cache_entry_t *ep, vlib_buffer_t *b0)
 
u8vnet_dns_labels_to_name (u8 *label, u8 *full_text, u8 **parse_from_here)
 arc-function for the above. More...
 
void vnet_dns_create_resolver_process (vlib_main_t *vm, dns_main_t *dm)
 
static void dns_cache_lock (dns_main_t *dm, int tag)
 
static void dns_cache_unlock (dns_main_t *dm)
 
int dns_resolve_name (u8 *name, dns_cache_entry_t **ep, dns_pending_request_t *t0, dns_resolve_name_t *rn)
 

Variables

dns_main_t dns_main
 
vlib_node_registration_t dns46_reply_node
 (constructor) VLIB_REGISTER_NODE (dns46_reply_node) More...
 
vlib_node_registration_t dns4_request_node
 (constructor) VLIB_REGISTER_NODE (dns4_request_node) More...
 
vlib_node_registration_t dns6_request_node
 (constructor) VLIB_REGISTER_NODE (dns6_request_node) More...
 
format_function_t format_dns_reply
 

Macro Definition Documentation

◆ DNS_CACHE_ENTRY_FLAG_CNAME

#define DNS_CACHE_ENTRY_FLAG_CNAME   (1<<2)

CNAME (indirect) entry.

Definition at line 88 of file dns.h.

◆ DNS_CACHE_ENTRY_FLAG_STATIC

#define DNS_CACHE_ENTRY_FLAG_STATIC   (1<<1)

static entry

Definition at line 87 of file dns.h.

◆ DNS_CACHE_ENTRY_FLAG_VALID

#define DNS_CACHE_ENTRY_FLAG_VALID   (1<<0)

we have Actual Data

Definition at line 86 of file dns.h.

◆ DNS_RESOLVER_EVENT_PENDING

#define DNS_RESOLVER_EVENT_PENDING   2

Definition at line 93 of file dns.h.

◆ DNS_RESOLVER_EVENT_RESOLVED

#define DNS_RESOLVER_EVENT_RESOLVED   1

Definition at line 92 of file dns.h.

◆ DNS_RETRIES_PER_SERVER

#define DNS_RETRIES_PER_SERVER   3

Definition at line 90 of file dns.h.

◆ foreach_dns46_reply_error

#define foreach_dns46_reply_error
Value:
_(DISABLED, "DNS pkts punted (feature disabled)") \
_(PROCESSED, "DNS reply pkts processed") \
_(NO_ELT, "No DNS pool element") \
_(FORMAT_ERROR, "DNS format errors") \
_(TEST_DROP, "DNS reply pkt dropped for test purposes") \
_(MULTIPLE_REPLY, "DNS multiple reply packets") \
_(NO_UNRESOLVED_ENTRY, "No unresolved entry for pkt")

Definition at line 158 of file dns.h.

◆ foreach_dns46_request_error

#define foreach_dns46_request_error
Value:
_(NONE, "No error") \
_(UNIMPLEMENTED, "Unimplemented") \
_(PROCESSED, "DNS request pkts processed") \
_(IP_OPTIONS, "DNS pkts with ip options (dropped)") \
_(BAD_REQUEST, "DNS pkts with serious discrepancies (dropped)") \
_(TOO_MANY_REQUESTS, "DNS pkts asking too many questions") \
_(RESOLUTION_REQUIRED, "DNS pkts pending upstream name resolution")

Definition at line 141 of file dns.h.

Enumeration Type Documentation

◆ dns46_reply_error_t

Enumerator
DNS46_REPLY_N_ERROR 

Definition at line 167 of file dns.h.

◆ dns46_request_error_t

Enumerator
DNS46_REQUEST_N_ERROR 

Definition at line 150 of file dns.h.

◆ dns_pending_request_type_t

Enumerator
DNS_API_PENDING_NAME_TO_IP 
DNS_API_PENDING_IP_TO_NAME 
DNS_PEER_PENDING_NAME_TO_IP 
DNS_PEER_PENDING_IP_TO_NAME 

Definition at line 47 of file dns.h.

Function Documentation

◆ dns_cache_lock()

static void dns_cache_lock ( dns_main_t dm,
int  tag 
)
inlinestatic

Definition at line 209 of file dns.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dns_cache_unlock()

static void dns_cache_unlock ( dns_main_t dm)
inlinestatic

Definition at line 221 of file dns.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dns_resolve_name()

int dns_resolve_name ( u8 name,
dns_cache_entry_t **  ep,
dns_pending_request_t t0,
dns_resolve_name_t rn 
)

Definition at line 1438 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_dns_cname_indirection_nolock()

int vnet_dns_cname_indirection_nolock ( vlib_main_t vm,
dns_main_t dm,
u32  ep_index,
u8 reply 
)

Handle cname indirection.

JFC. Called with the cache locked. returns 0 if the reply is not a CNAME.

Definition at line 966 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_dns_create_resolver_process()

void vnet_dns_create_resolver_process ( vlib_main_t vm,
dns_main_t dm 
)

Definition at line 349 of file resolver_process.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_dns_delete_entry_by_index_nolock()

int vnet_dns_delete_entry_by_index_nolock ( dns_main_t dm,
u32  index 
)

Definition at line 662 of file dns.c.

+ Here is the caller graph for this function:

◆ vnet_dns_labels_to_name()

u8* vnet_dns_labels_to_name ( u8 label,
u8 full_text,
u8 **  parse_from_here 
)

arc-function for the above.

Translate "0x3 f o o 0x3 c o m 0x0" into "foo.com" Produces a non-NULL-terminated u8 *vector. v format is your friend.

Definition at line 495 of file dns.c.

+ Here is the caller graph for this function:

◆ vnet_dns_resolve_name()

int vnet_dns_resolve_name ( vlib_main_t vm,
dns_main_t dm,
u8 name,
dns_pending_request_t t,
dns_cache_entry_t **  retp 
)

Definition at line 810 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_dns_send_dns4_request()

void vnet_dns_send_dns4_request ( vlib_main_t vm,
dns_main_t dm,
dns_cache_entry_t ep,
ip4_address_t server 
)

Definition at line 221 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_dns_send_dns6_request()

void vnet_dns_send_dns6_request ( vlib_main_t vm,
dns_main_t dm,
dns_cache_entry_t ep,
ip6_address_t *  server 
)

Definition at line 339 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_send_dns4_reply()

void vnet_send_dns4_reply ( vlib_main_t vm,
dns_main_t dm,
dns_pending_request_t t,
dns_cache_entry_t ep,
vlib_buffer_t b0 
)

Definition at line 2747 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vnet_send_dns6_reply()

void vnet_send_dns6_reply ( vlib_main_t vm,
dns_main_t dm,
dns_pending_request_t t,
dns_cache_entry_t ep,
vlib_buffer_t b0 
)

Definition at line 2738 of file dns.c.

+ Here is the caller graph for this function:

◆ vnet_send_dns_request()

void vnet_send_dns_request ( vlib_main_t vm,
dns_main_t dm,
dns_cache_entry_t ep 
)

Definition at line 537 of file dns.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ dns46_reply_node

vlib_node_registration_t dns46_reply_node
Initial value:
=
{
.function = dns46_reply_node_fn,
.name = "dns46_reply",
.vector_size = sizeof (u32),
.format_trace = format_dns46_reply_trace,
.error_strings = dns46_reply_error_strings,
.n_next_nodes = DNS46_REPLY_N_NEXT,
.next_nodes = {
[DNS46_REPLY_NEXT_DROP] = "error-drop",
[DNS46_REPLY_NEXT_PUNT] = "error-punt",
},
}

(constructor) VLIB_REGISTER_NODE (dns46_reply_node)

Definition at line 42 of file reply_node.c.

◆ dns4_request_node

vlib_node_registration_t dns4_request_node

(constructor) VLIB_REGISTER_NODE (dns4_request_node)

Definition at line 293 of file request_node.c.

◆ dns6_request_node

vlib_node_registration_t dns6_request_node

(constructor) VLIB_REGISTER_NODE (dns6_request_node)

Definition at line 320 of file request_node.c.

◆ dns_main

dns_main_t dns_main

Definition at line 42 of file dns.c.

◆ format_dns_reply

format_function_t format_dns_reply

Definition at line 206 of file dns.h.

dns46_reply_error_strings
static char * dns46_reply_error_strings[]
Definition: reply_node.c:44
VLIB_NODE_TYPE_INTERNAL
@ VLIB_NODE_TYPE_INTERNAL
Definition: node.h:72
ARRAY_LEN
#define ARRAY_LEN(x)
Definition: clib.h:70
DNS46_REPLY_N_NEXT
@ DNS46_REPLY_N_NEXT
Definition: reply_node.c:54
u32
unsigned int u32
Definition: types.h:88
dns46_reply_node_fn
static uword dns46_reply_node_fn(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
Definition: reply_node.c:58
DNS46_REPLY_NEXT_PUNT
@ DNS46_REPLY_NEXT_PUNT
Definition: reply_node.c:53
DNS46_REPLY_NEXT_DROP
@ DNS46_REPLY_NEXT_DROP
Definition: reply_node.c:52
type
vl_api_fib_path_type_t type
Definition: fib_types.api:123
format_dns46_reply_trace
static u8 * format_dns46_reply_trace(u8 *s, va_list *args)
Definition: reply_node.c:31