packet.h File Reference

Go to the source code of this file.

Data Structures

struct  ldns_struct_hdr
 Header of a dns packet. More...
struct  ldns_struct_pkt
 DNS packet. More...

Defines

#define LDNS_MAX_PACKETLEN   65535
#define LDNS_QR   1
#define LDNS_AA   2
#define LDNS_TC   4
#define LDNS_RD   8
#define LDNS_CD   16
#define LDNS_RA   32
#define LDNS_AD   64

Typedefs

typedef enum ldns_enum_pkt_opcode ldns_pkt_opcode
typedef ldns_struct_hdr ldns_hdr
typedef ldns_struct_pkt ldns_pkt
typedef enum ldns_enum_pkt_section ldns_pkt_section
typedef enum ldns_enum_pkt_type ldns_pkt_type

Enumerations

enum  ldns_enum_pkt_opcode {
  LDNS_PACKET_QUERY = 0, LDNS_PACKET_IQUERY = 1, LDNS_PACKET_STATUS = 2, LDNS_PACKET_NOTIFY = 4,
  LDNS_PACKET_UPDATE = 5
}
enum  ldns_enum_pkt_section {
  LDNS_SECTION_QUESTION = 0, LDNS_SECTION_ANSWER = 1, LDNS_SECTION_AUTHORITY = 2, LDNS_SECTION_ADDITIONAL = 3,
  LDNS_SECTION_ANY = 4, LDNS_SECTION_ANY_NOQUESTION = 5
}
 The sections of a packet. More...
enum  ldns_enum_pkt_type {
  LDNS_PACKET_QUESTION, LDNS_PACKET_REFERRAL, LDNS_PACKET_ANSWER, LDNS_PACKET_NXDOMAIN,
  LDNS_PACKET_NODATA, LDNS_PACKET_UNKNOWN
}
 The different types of packets. More...

Functions

uint16_t ldns_pkt_id (const ldns_pkt *p)
bool ldns_pkt_qr (const ldns_pkt *p)
bool ldns_pkt_aa (const ldns_pkt *p)
bool ldns_pkt_tc (const ldns_pkt *p)
bool ldns_pkt_rd (const ldns_pkt *p)
bool ldns_pkt_cd (const ldns_pkt *p)
bool ldns_pkt_ra (const ldns_pkt *p)
bool ldns_pkt_ad (const ldns_pkt *p)
ldns_pkt_opcode ldns_pkt_get_opcode (const ldns_pkt *p)
uint8_t ldns_pkt_rcode (const ldns_pkt *p)
uint16_t ldns_pkt_qdcount (const ldns_pkt *p)
uint16_t ldns_pkt_ancount (const ldns_pkt *p)
uint16_t ldns_pkt_nscount (const ldns_pkt *p)
uint16_t ldns_pkt_arcount (const ldns_pkt *p)
ldns_rdfldns_pkt_answerfrom (const ldns_pkt *p)
char * ldns_pkt_when (const ldns_pkt *p)
uint32_t ldns_pkt_querytime (const ldns_pkt *p)
size_t ldns_pkt_size (const ldns_pkt *p)
ldns_rrldns_pkt_tsig (const ldns_pkt *p)
ldns_rr_listldns_pkt_question (const ldns_pkt *p)
ldns_rr_listldns_pkt_answer (const ldns_pkt *p)
ldns_rr_listldns_pkt_authority (const ldns_pkt *p)
ldns_rr_listldns_pkt_additional (const ldns_pkt *p)
ldns_rr_listldns_pkt_get_section_clone (ldns_pkt *p, ldns_pkt_section s)
 return all the rr_list's in the packet.
ldns_rr_listldns_pkt_rr_list_by_name (ldns_pkt *p, ldns_rdf *r, ldns_pkt_section s)
ldns_rr_listldns_pkt_rr_list_by_type (ldns_pkt *p, ldns_rr_type t, ldns_pkt_section s)
ldns_rr_listldns_pkt_rr_list_by_name_and_type (ldns_pkt *packet, ldns_rdf *ownername, ldns_rr_type type, ldns_pkt_section sec)
bool ldns_pkt_set_flags (ldns_pkt *pkt, uint16_t flags)
 sets the flags in a packet.
void ldns_pkt_set_id (ldns_pkt *p, uint16_t id)
void ldns_pkt_set_random_id (ldns_pkt *p)
void ldns_pkt_set_qr (ldns_pkt *p, bool b)
void ldns_pkt_set_aa (ldns_pkt *p, bool b)
void ldns_pkt_set_tc (ldns_pkt *p, bool b)
void ldns_pkt_set_rd (ldns_pkt *p, bool b)
void ldns_pkt_set_cd (ldns_pkt *p, bool b)
void ldns_pkt_set_ra (ldns_pkt *p, bool b)
void ldns_pkt_set_ad (ldns_pkt *p, bool b)
void ldns_pkt_set_opcode (ldns_pkt *p, ldns_pkt_opcode c)
void ldns_pkt_set_rcode (ldns_pkt *p, uint8_t c)
void ldns_pkt_set_qdcount (ldns_pkt *p, uint16_t c)
void ldns_pkt_set_ancount (ldns_pkt *p, uint16_t c)
void ldns_pkt_set_nscount (ldns_pkt *p, uint16_t c)
void ldns_pkt_set_arcount (ldns_pkt *p, uint16_t c)
void ldns_pkt_set_answerfrom (ldns_pkt *p, ldns_rdf *r)
void ldns_pkt_set_querytime (ldns_pkt *p, uint32_t t)
void ldns_pkt_set_size (ldns_pkt *p, size_t s)
void ldns_pkt_set_when (ldns_pkt *p, char *w)
void ldns_pkt_set_section_count (ldns_pkt *p, ldns_pkt_section s, uint16_t x)
void ldns_pkt_set_tsig (ldns_pkt *p, ldns_rr *t)
ldns_pkt_type ldns_pkt_reply_type (ldns_pkt *p)
 looks inside the packet to determine what kind of packet it is, AUTH, NXDOMAIN, REFERRAL, etc.
uint16_t ldns_pkt_edns_udp_size (const ldns_pkt *packet)
uint8_t ldns_pkt_edns_extended_rcode (const ldns_pkt *packet)
uint8_t ldns_pkt_edns_version (const ldns_pkt *packet)
uint16_t ldns_pkt_edns_z (const ldns_pkt *packet)
ldns_rdfldns_pkt_edns_data (const ldns_pkt *packet)
bool ldns_pkt_edns_do (const ldns_pkt *packet)
void ldns_pkt_set_edns_do (ldns_pkt *packet, bool value)
bool ldns_pkt_edns (const ldns_pkt *packet)
 returns true if this packet needs and EDNS rr to be sent.
void ldns_pkt_set_edns_udp_size (ldns_pkt *packet, uint16_t s)
void ldns_pkt_set_edns_extended_rcode (ldns_pkt *packet, uint8_t c)
void ldns_pkt_set_edns_version (ldns_pkt *packet, uint8_t v)
void ldns_pkt_set_edns_z (ldns_pkt *packet, uint16_t z)
void ldns_pkt_set_edns_data (ldns_pkt *packet, ldns_rdf *data)
ldns_pktldns_pkt_new ()
 allocates and initializes a ldns_pkt structure.
void ldns_pkt_free (ldns_pkt *packet)
 frees the packet structure and all data that it contains.
ldns_pktldns_pkt_query_new_frm_str (const char *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags)
 creates a query packet for the given name, type, class.
ldns_pktldns_pkt_query_new (ldns_rdf *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags)
 creates a packet with a query in it for the given name, type and class.
ldns_pktldns_pkt_clone (ldns_pkt *pkt)
 clones the given packet, creating a fully allocated copy
ldns_rrldns_pkt_get_rr (ldns_pkt *p, uint16_t n)
ldns_rrldns_pkt_set_rr (ldns_pkt *p, ldns_rr *rr, uint16_t n)
bool ldns_pkt_insert_rr (ldns_pkt *p, ldns_rr *rr, uint16_t n)


Define Documentation

#define LDNS_AA   2

Definition at line 290 of file packet.h.

#define LDNS_AD   64

Definition at line 295 of file packet.h.

#define LDNS_CD   16

Definition at line 293 of file packet.h.

#define LDNS_MAX_PACKETLEN   65535

Definition at line 286 of file packet.h.

#define LDNS_QR   1

Definition at line 289 of file packet.h.

#define LDNS_RA   32

Definition at line 294 of file packet.h.

#define LDNS_RD   8

Definition at line 292 of file packet.h.

#define LDNS_TC   4

Definition at line 291 of file packet.h.


Typedef Documentation

typedef struct ldns_struct_hdr ldns_hdr

Definition at line 66 of file packet.h.

typedef struct ldns_struct_pkt ldns_pkt

Definition at line 104 of file packet.h.

typedef enum ldns_enum_pkt_opcode ldns_pkt_opcode

Definition at line 28 of file packet.h.

typedef enum ldns_enum_pkt_section ldns_pkt_section

Definition at line 119 of file packet.h.

typedef enum ldns_enum_pkt_type ldns_pkt_type

Definition at line 132 of file packet.h.


Enumeration Type Documentation

enum ldns_enum_pkt_opcode

Enumerator:
LDNS_PACKET_QUERY 
LDNS_PACKET_IQUERY 
LDNS_PACKET_STATUS 
LDNS_PACKET_NOTIFY 
LDNS_PACKET_UPDATE 

Definition at line 21 of file packet.h.

enum ldns_enum_pkt_section

The sections of a packet.

Enumerator:
LDNS_SECTION_QUESTION 
LDNS_SECTION_ANSWER 
LDNS_SECTION_AUTHORITY 
LDNS_SECTION_ADDITIONAL 
LDNS_SECTION_ANY  bogus section, if not interested
LDNS_SECTION_ANY_NOQUESTION  used to get all non-question rrs from a packet

Definition at line 109 of file packet.h.

enum ldns_enum_pkt_type

The different types of packets.

Enumerator:
LDNS_PACKET_QUESTION 
LDNS_PACKET_REFERRAL 
LDNS_PACKET_ANSWER 
LDNS_PACKET_NXDOMAIN 
LDNS_PACKET_NODATA 
LDNS_PACKET_UNKNOWN 

Definition at line 124 of file packet.h.


Function Documentation

bool ldns_pkt_aa ( const ldns_pkt p  ) 

bool ldns_pkt_ad ( const ldns_pkt p  ) 

ldns_rr_list* ldns_pkt_additional ( const ldns_pkt p  ) 

uint16_t ldns_pkt_ancount ( const ldns_pkt p  ) 

ldns_rr_list* ldns_pkt_answer ( const ldns_pkt p  ) 

ldns_rdf* ldns_pkt_answerfrom ( const ldns_pkt p  ) 

uint16_t ldns_pkt_arcount ( const ldns_pkt p  ) 

ldns_rr_list* ldns_pkt_authority ( const ldns_pkt p  ) 

bool ldns_pkt_cd ( const ldns_pkt p  ) 

ldns_pkt* ldns_pkt_clone ( ldns_pkt pkt  ) 

clones the given packet, creating a fully allocated copy

Parameters:
[in] pkt the packet to clone
Returns:
ldns_pkt* pointer to the new packet

bool ldns_pkt_edns ( const ldns_pkt packet  ) 

returns true if this packet needs and EDNS rr to be sent.

At the moment the only reason is an expected packet size larger than 512 bytes, but for instance dnssec would be a good reason too.

Parameters:
[in] packet the packet to check
Returns:
true if packet needs edns rr

ldns_rdf* ldns_pkt_edns_data ( const ldns_pkt packet  ) 

bool ldns_pkt_edns_do ( const ldns_pkt packet  ) 

uint8_t ldns_pkt_edns_extended_rcode ( const ldns_pkt packet  ) 

uint16_t ldns_pkt_edns_udp_size ( const ldns_pkt packet  ) 

uint8_t ldns_pkt_edns_version ( const ldns_pkt packet  ) 

uint16_t ldns_pkt_edns_z ( const ldns_pkt packet  ) 

void ldns_pkt_free ( ldns_pkt packet  ) 

frees the packet structure and all data that it contains.

Parameters:
[in] packet The packet structure to free
Returns:
void

ldns_pkt_opcode ldns_pkt_get_opcode ( const ldns_pkt p  ) 

ldns_rr* ldns_pkt_get_rr ( ldns_pkt p,
uint16_t  n 
)

ldns_rr_list* ldns_pkt_get_section_clone ( ldns_pkt p,
ldns_pkt_section  s 
)

return all the rr_list's in the packet.

Clone the lists, instead of returning pointers.

Parameters:
[in] p the packet to look in
[in] s what section(s) to return
Returns:
ldns_rr_list with the rr's or NULL if none were found

uint16_t ldns_pkt_id ( const ldns_pkt p  ) 

bool ldns_pkt_insert_rr ( ldns_pkt p,
ldns_rr rr,
uint16_t  n 
)

ldns_pkt* ldns_pkt_new (  ) 

allocates and initializes a ldns_pkt structure.

Returns:
pointer to the new packet

uint16_t ldns_pkt_nscount ( const ldns_pkt p  ) 

uint16_t ldns_pkt_qdcount ( const ldns_pkt p  ) 

bool ldns_pkt_qr ( const ldns_pkt p  ) 

ldns_pkt* ldns_pkt_query_new ( ldns_rdf rr_name,
ldns_rr_type  rr_type,
ldns_rr_class  rr_class,
uint16_t  flags 
)

creates a packet with a query in it for the given name, type and class.

Parameters:
[in] rr_name the name to query for
[in] rr_type the type to query for
[in] rr_class the class to query for
[in] flags packet flags
Returns:
ldns_pkt* a pointer to the new pkt

ldns_pkt* ldns_pkt_query_new_frm_str ( const char *  rr_name,
ldns_rr_type  rr_type,
ldns_rr_class  rr_class,
uint16_t  flags 
)

creates a query packet for the given name, type, class.

Parameters:
[in] rr_name the name to query for (as string)
[in] rr_type the type to query for
[in] rr_class the class to query for
[in] flags packet flags
Returns:
ldns_pkt* a pointer to the new pkt

uint32_t ldns_pkt_querytime ( const ldns_pkt p  ) 

ldns_rr_list* ldns_pkt_question ( const ldns_pkt p  ) 

bool ldns_pkt_ra ( const ldns_pkt p  ) 

uint8_t ldns_pkt_rcode ( const ldns_pkt p  ) 

bool ldns_pkt_rd ( const ldns_pkt p  ) 

ldns_pkt_type ldns_pkt_reply_type ( ldns_pkt p  ) 

looks inside the packet to determine what kind of packet it is, AUTH, NXDOMAIN, REFERRAL, etc.

Parameters:
[in] p the packet to examine
Returns:
the type of packet

ldns_rr_list* ldns_pkt_rr_list_by_name ( ldns_pkt p,
ldns_rdf r,
ldns_pkt_section  s 
)

ldns_rr_list* ldns_pkt_rr_list_by_name_and_type ( ldns_pkt packet,
ldns_rdf ownername,
ldns_rr_type  type,
ldns_pkt_section  sec 
)

ldns_rr_list* ldns_pkt_rr_list_by_type ( ldns_pkt p,
ldns_rr_type  t,
ldns_pkt_section  s 
)

void ldns_pkt_set_aa ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_ad ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_ancount ( ldns_pkt p,
uint16_t  c 
)

void ldns_pkt_set_answerfrom ( ldns_pkt p,
ldns_rdf r 
)

void ldns_pkt_set_arcount ( ldns_pkt p,
uint16_t  c 
)

void ldns_pkt_set_cd ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_edns_data ( ldns_pkt packet,
ldns_rdf data 
)

void ldns_pkt_set_edns_do ( ldns_pkt packet,
bool  value 
)

void ldns_pkt_set_edns_extended_rcode ( ldns_pkt packet,
uint8_t  c 
)

void ldns_pkt_set_edns_udp_size ( ldns_pkt packet,
uint16_t  s 
)

void ldns_pkt_set_edns_version ( ldns_pkt packet,
uint8_t  v 
)

void ldns_pkt_set_edns_z ( ldns_pkt packet,
uint16_t  z 
)

bool ldns_pkt_set_flags ( ldns_pkt pkt,
uint16_t  flags 
)

sets the flags in a packet.

Parameters:
[in] pkt the packet to operate on
[in] flags ORed values: LDNS_QR| LDNS_AR for instance
Returns:
true on success otherwise false

void ldns_pkt_set_id ( ldns_pkt p,
uint16_t  id 
)

void ldns_pkt_set_nscount ( ldns_pkt p,
uint16_t  c 
)

void ldns_pkt_set_opcode ( ldns_pkt p,
ldns_pkt_opcode  c 
)

void ldns_pkt_set_qdcount ( ldns_pkt p,
uint16_t  c 
)

void ldns_pkt_set_qr ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_querytime ( ldns_pkt p,
uint32_t  t 
)

void ldns_pkt_set_ra ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_random_id ( ldns_pkt p  ) 

void ldns_pkt_set_rcode ( ldns_pkt p,
uint8_t  c 
)

void ldns_pkt_set_rd ( ldns_pkt p,
bool  b 
)

ldns_rr* ldns_pkt_set_rr ( ldns_pkt p,
ldns_rr rr,
uint16_t  n 
)

void ldns_pkt_set_section_count ( ldns_pkt p,
ldns_pkt_section  s,
uint16_t  x 
)

void ldns_pkt_set_size ( ldns_pkt p,
size_t  s 
)

void ldns_pkt_set_tc ( ldns_pkt p,
bool  b 
)

void ldns_pkt_set_tsig ( ldns_pkt p,
ldns_rr t 
)

void ldns_pkt_set_when ( ldns_pkt p,
char *  w 
)

size_t ldns_pkt_size ( const ldns_pkt p  ) 

bool ldns_pkt_tc ( const ldns_pkt p  ) 

ldns_rr* ldns_pkt_tsig ( const ldns_pkt p  ) 

char* ldns_pkt_when ( const ldns_pkt p  ) 


Generated on Mon Sep 11 20:10:20 2006 for ldns by  doxygen 1.4.7