Main Page | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

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 Tue Jan 24 02:22:29 2006 for ldns by  doxygen 1.4.4