packet.h
Go to the documentation of this file.
/*
* packet.h
*
* DNS packet definitions
*
* a Net::DNS like library for C
*
* (c) NLnet Labs, 2005-2006
*
* See the file LICENSE for the license
*/
#ifndef LDNS_PACKET_H
#define LDNS_PACKET_H
#define LDNS_MAX_PACKETLEN 65535
/* allow flags to be given to ldns_pkt_query_new */
#define LDNS_QR 1 /* Query Response flag */
#define LDNS_AA 2 /* Authoritative Answer - server flag */
#define LDNS_TC 4 /* TrunCated - server flag */
#define LDNS_RD 8 /* Recursion Desired - query flag */
#define LDNS_CD 16 /* Checking Disabled - query flag */
#define LDNS_RA 32 /* Recursion Available - server flag */
#define LDNS_AD 64 /* Authenticated Data - server flag */
#include <ldns/error.h>
#include <ldns/common.h>
#include <ldns/rr.h>
#include <ldns/edns.h>
#include <sys/time.h>
#ifdef __cplusplus
extern "C" {
#endif
/* opcodes for pkt's */
enum ldns_enum_pkt_opcode {
LDNS_PACKET_QUERY = 0,
LDNS_PACKET_IQUERY = 1,
LDNS_PACKET_STATUS = 2, /* there is no 3?? DNS is weird */
LDNS_PACKET_NOTIFY = 4,
LDNS_PACKET_UPDATE = 5
};
typedef enum ldns_enum_pkt_opcode ldns_pkt_opcode;
/* rcodes for pkts */
enum ldns_enum_pkt_rcode {
LDNS_RCODE_NOERROR = 0,
LDNS_RCODE_FORMERR = 1,
LDNS_RCODE_SERVFAIL = 2,
LDNS_RCODE_NXDOMAIN = 3,
LDNS_RCODE_NOTIMPL = 4,
LDNS_RCODE_REFUSED = 5,
LDNS_RCODE_YXDOMAIN = 6,
LDNS_RCODE_YXRRSET = 7,
LDNS_RCODE_NXRRSET = 8,
LDNS_RCODE_NOTAUTH = 9,
LDNS_RCODE_NOTZONE = 10
};
typedef enum ldns_enum_pkt_rcode ldns_pkt_rcode;
struct ldns_struct_hdr
{
uint16_t _id;
bool _qr;
bool _aa;
bool _tc;
bool _rd;
bool _cd;
bool _ra;
bool _ad;
ldns_pkt_opcode _opcode; /* XXX 8 bits? */
uint8_t _rcode;
uint16_t _qdcount;
uint16_t _ancount;
uint16_t _nscount;
uint16_t _arcount;
};
typedef struct ldns_struct_hdr ldns_hdr;
struct ldns_struct_pkt
{
ldns_hdr *_header;
/* extra items needed in a packet */
ldns_rdf *_answerfrom;
struct timeval timestamp;
uint32_t _querytime;
size_t _size;
ldns_rr *_tsig_rr;
uint16_t _edns_udp_size;
uint8_t _edns_extended_rcode;
uint8_t _edns_version;
/* OPT pseudo-RR presence flag */
uint8_t _edns_present;
uint16_t _edns_z;
ldns_rdf *_edns_data;
ldns_edns_option_list *_edns_list;
ldns_rr_list *_question;
ldns_rr_list *_answer;
ldns_rr_list *_authority;
ldns_rr_list *_additional;
};
typedef struct ldns_struct_pkt ldns_pkt;
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
};
typedef enum ldns_enum_pkt_section ldns_pkt_section;
enum ldns_enum_pkt_type {
LDNS_PACKET_QUESTION,
LDNS_PACKET_REFERRAL,
LDNS_PACKET_ANSWER,
LDNS_PACKET_NXDOMAIN,
LDNS_PACKET_NODATA,
LDNS_PACKET_UNKNOWN
};
typedef enum ldns_enum_pkt_type ldns_pkt_type;
/* prototypes */
/* read */
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);
ldns_pkt_rcode ldns_pkt_get_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_rdf *ldns_pkt_answerfrom(const ldns_pkt *p);
struct timeval ldns_pkt_timestamp(const ldns_pkt *p);
uint32_t ldns_pkt_querytime(const ldns_pkt *p);
size_t ldns_pkt_size(const ldns_pkt *p);
uint16_t ldns_pkt_section_count(const ldns_pkt *p, ldns_pkt_section s);
ldns_rr *ldns_pkt_tsig(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_question(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_answer(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_authority(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_additional(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_all(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_all_noquestion(const ldns_pkt *p);
ldns_rr_list *ldns_pkt_get_section_clone(const ldns_pkt *p, ldns_pkt_section s);
ldns_rr_list *ldns_pkt_rr_list_by_name(const ldns_pkt *p, const ldns_rdf *r, ldns_pkt_section s);
ldns_rr_list *ldns_pkt_rr_list_by_type(const ldns_pkt *p, ldns_rr_type t, ldns_pkt_section s);
ldns_rr_list *ldns_pkt_rr_list_by_name_and_type(const ldns_pkt *packet, const ldns_rdf *ownername, ldns_rr_type type, ldns_pkt_section sec);
bool ldns_pkt_rr(const ldns_pkt *pkt, ldns_pkt_section sec, const ldns_rr *rr);
bool ldns_pkt_set_flags(ldns_pkt *pkt, uint16_t flags);
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_timestamp(ldns_pkt *p, struct timeval timeval);
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(const ldns_pkt *p);
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_rdf *ldns_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);
uint16_t ldns_pkt_edns_unassigned(const ldns_pkt *packet);
void ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value);
bool ldns_pkt_edns(const ldns_pkt *packet);
ldns_edns_option_list* ldns_pkt_edns_get_option_list(ldns_pkt *packet);
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);
void ldns_pkt_set_edns_option_list(ldns_pkt *packet, ldns_edns_option_list *list);
ldns_pkt *ldns_pkt_new(void);
void ldns_pkt_free(ldns_pkt *packet);
ldns_status ldns_pkt_query_new_frm_str(ldns_pkt **p, const char *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class , uint16_t flags);
ldns_status ldns_pkt_ixfr_request_new_frm_str(ldns_pkt **p, const char *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr* soa);
ldns_pkt *ldns_pkt_query_new(ldns_rdf *rr_name, ldns_rr_type rr_type, ldns_rr_class rr_class, uint16_t flags);
ldns_pkt *ldns_pkt_ixfr_request_new(ldns_rdf *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr* soa);
ldns_pkt *ldns_pkt_clone(const ldns_pkt *pkt);
void ldns_pkt_set_additional(ldns_pkt *p, ldns_rr_list *rr);
void ldns_pkt_set_answer(ldns_pkt *p, ldns_rr_list *rr);
void ldns_pkt_set_question(ldns_pkt *p, ldns_rr_list *rr);
void ldns_pkt_set_authority(ldns_pkt *p, ldns_rr_list *rr);
bool ldns_pkt_push_rr(ldns_pkt *packet, ldns_pkt_section section, ldns_rr *rr);
bool ldns_pkt_safe_push_rr(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr *rr);
bool ldns_pkt_push_rr_list(ldns_pkt *packet, ldns_pkt_section section, ldns_rr_list *list);
bool ldns_pkt_safe_push_rr_list(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr_list *list);
bool ldns_pkt_empty(ldns_pkt *p);
#ifdef __cplusplus
}
#endif
#endif /* LDNS_PACKET_H */
common.h
Common definitions for LDNS.
edns.h
error.h
Defines error numbers and functions to translate those to a readable string.
ldns_status
enum ldns_enum_status ldns_status
Definition error.h:148
ldns_pkt_type
enum ldns_enum_pkt_type ldns_pkt_type
Definition packet.h:300
ldns_pkt_edns
signed char ldns_pkt_edns(const ldns_pkt *packet)
returns true if this packet needs and EDNS rr to be sent.
Definition packet.c:750
ldns_pkt_free
void ldns_pkt_free(ldns_pkt *packet)
frees the packet structure and all data that it contains.
Definition packet.c:897
ldns_pkt_edns_version
uint8_t ldns_pkt_edns_version(const ldns_pkt *packet)
return the packet's edns version
Definition packet.c:219
ldns_pkt_aa
signed char ldns_pkt_aa(const ldns_pkt *p)
Read the packet's aa bit.
Definition packet.c:52
ldns_pkt_set_ad
void ldns_pkt_set_ad(ldns_pkt *p, signed char b)
Set the packet's ad bit.
ldns_pkt_set_timestamp
void ldns_pkt_set_timestamp(ldns_pkt *p, struct timeval timeval)
Set the packet's timestamp.
Definition packet.c:599
ldns_pkt_section_count
uint16_t ldns_pkt_section_count(const ldns_pkt *p, ldns_pkt_section s)
Return the number of RRs in the given section.
Definition packet.c:404
ldns_pkt_set_flags
signed char ldns_pkt_set_flags(ldns_pkt *pkt, uint16_t flags)
sets the flags in a packet.
Definition packet.c:914
ldns_pkt_set_size
void ldns_pkt_set_size(ldns_pkt *p, size_t s)
Set the packet's size.
Definition packet.c:606
ldns_pkt_set_cd
void ldns_pkt_set_cd(ldns_pkt *p, signed char b)
Set the packet's cd bit.
ldns_pkt_size
size_t ldns_pkt_size(const ldns_pkt *p)
Return the packet's size in bytes.
Definition packet.c:183
ldns_pkt_safe_push_rr_list
signed char ldns_pkt_safe_push_rr_list(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr_list *list)
push an rr_list to a packet, provided the RRs are not already there.
Definition packet.c:738
ldns_pkt_ixfr_request_new
ldns_pkt * ldns_pkt_ixfr_request_new(ldns_rdf *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr *soa)
creates an IXFR request packet for the given name, type and class.
Definition packet.c:1158
ldns_pkt_safe_push_rr
signed char ldns_pkt_safe_push_rr(ldns_pkt *pkt, ldns_pkt_section sec, ldns_rr *rr)
push an rr on a packet, provided the RR is not there.
Definition packet.c:714
ldns_pkt_rr
signed char ldns_pkt_rr(const ldns_pkt *pkt, ldns_pkt_section sec, const ldns_rr *rr)
check to see if an rr exist in the packet
Definition packet.c:377
ldns_pkt_set_edns_udp_size
void ldns_pkt_set_edns_udp_size(ldns_pkt *packet, uint16_t s)
Set the packet's edns udp size.
Definition packet.c:612
ldns_pkt_set_additional
void ldns_pkt_set_additional(ldns_pkt *p, ldns_rr_list *rr)
directly set the additional section
Definition packet.c:509
ldns_pkt_additional
ldns_rr_list * ldns_pkt_additional(const ldns_pkt *p)
Return the packet's additional section.
Definition packet.c:142
ldns_pkt_rr_list_by_name
ldns_rr_list * ldns_pkt_rr_list_by_name(const ldns_pkt *p, const ldns_rdf *r, ldns_pkt_section s)
return all the rr with a specific name from a packet.
Definition packet.c:267
ldns_pkt_authority
ldns_rr_list * ldns_pkt_authority(const ldns_pkt *p)
Return the packet's authority section.
Definition packet.c:136
ldns_pkt_rr_list_by_type
ldns_rr_list * ldns_pkt_rr_list_by_type(const ldns_pkt *p, ldns_rr_type t, ldns_pkt_section s)
return all the rr with a specific type from a packet.
Definition packet.c:304
ldns_pkt_set_edns_option_list
void ldns_pkt_set_edns_option_list(ldns_pkt *packet, ldns_edns_option_list *list)
Set the packet's structured EDNS data.
Definition packet.c:642
ldns_pkt_answerfrom
ldns_rdf * ldns_pkt_answerfrom(const ldns_pkt *p)
Return the packet's answerfrom.
Definition packet.c:195
ldns_pkt_set_answerfrom
void ldns_pkt_set_answerfrom(ldns_pkt *p, ldns_rdf *r)
Set the packet's answering server.
Definition packet.c:593
ldns_pkt_querytime
uint32_t ldns_pkt_querytime(const ldns_pkt *p)
Return the packet's querytime.
Definition packet.c:189
ldns_pkt_set_authority
void ldns_pkt_set_authority(ldns_pkt *p, ldns_rr_list *rr)
directly set the authority section
Definition packet.c:527
ldns_pkt_question
ldns_rr_list * ldns_pkt_question(const ldns_pkt *p)
Return the packet's question section.
Definition packet.c:124
ldns_pkt_query_new
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.
Definition packet.c:1150
ldns_pkt_set_qr
void ldns_pkt_set_qr(ldns_pkt *p, signed char b)
Set the packet's qr bit.
ldns_pkt_ancount
uint16_t ldns_pkt_ancount(const ldns_pkt *p)
Return the packet's an count.
Definition packet.c:106
ldns_pkt_nscount
uint16_t ldns_pkt_nscount(const ldns_pkt *p)
Return the packet's ns count.
Definition packet.c:112
ldns_pkt_push_rr_list
signed char ldns_pkt_push_rr_list(ldns_pkt *packet, ldns_pkt_section section, ldns_rr_list *list)
push a rr_list on a packet
Definition packet.c:726
ldns_pkt_set_aa
void ldns_pkt_set_aa(ldns_pkt *p, signed char b)
Set the packet's aa bit.
ldns_pkt_ixfr_request_new_frm_str
ldns_status ldns_pkt_ixfr_request_new_frm_str(ldns_pkt **p, const char *rr_name, ldns_rr_class rr_class, uint16_t flags, ldns_rr *soa)
creates an IXFR request packet for the given name, class.
Definition packet.c:1091
ldns_pkt_rcode
enum ldns_enum_pkt_rcode ldns_pkt_rcode
Definition packet.h:69
ldns_pkt_answer
ldns_rr_list * ldns_pkt_answer(const ldns_pkt *p)
Return the packet's answer section.
Definition packet.c:130
ldns_pkt_empty
signed char ldns_pkt_empty(ldns_pkt *p)
check if a packet is empty
Definition packet.c:430
ldns_pkt_edns_get_option_list
ldns_edns_option_list * ldns_pkt_edns_get_option_list(ldns_pkt *packet)
Returns a list of structured EDNS options.
Definition packet.c:823
ldns_pkt_id
uint16_t ldns_pkt_id(const ldns_pkt *p)
Read the packet id.
Definition packet.c:40
ldns_pkt_all_noquestion
ldns_rr_list * ldns_pkt_all_noquestion(const ldns_pkt *p)
Return the packet's answer, authority and additional sections concatenated, in a new rr_list clone.
Definition packet.c:168
ldns_enum_pkt_opcode
ldns_enum_pkt_opcode
Definition packet.h:46
LDNS_PACKET_IQUERY
@ LDNS_PACKET_IQUERY
Definition packet.h:48
LDNS_PACKET_NOTIFY
@ LDNS_PACKET_NOTIFY
Definition packet.h:50
LDNS_PACKET_QUERY
@ LDNS_PACKET_QUERY
Definition packet.h:47
LDNS_PACKET_STATUS
@ LDNS_PACKET_STATUS
Definition packet.h:49
LDNS_PACKET_UPDATE
@ LDNS_PACKET_UPDATE
Definition packet.h:51
ldns_pkt_set_rd
void ldns_pkt_set_rd(ldns_pkt *p, signed char b)
Set the packet's rd bit.
ldns_pkt_tc
signed char ldns_pkt_tc(const ldns_pkt *p)
Read the packet's tc bit.
Definition packet.c:58
ldns_pkt_edns_unassigned
uint16_t ldns_pkt_edns_unassigned(const ldns_pkt *packet)
return the packet's EDNS header bits that are unassigned.
Definition packet.c:247
ldns_pkt_push_rr
signed char ldns_pkt_push_rr(ldns_pkt *packet, ldns_pkt_section section, ldns_rr *rr)
push an rr on a packet
Definition packet.c:678
ldns_pkt_get_section_clone
ldns_rr_list * ldns_pkt_get_section_clone(const ldns_pkt *p, ldns_pkt_section s)
return all the rr_list's in the packet.
Definition packet.c:444
ldns_pkt_set_answer
void ldns_pkt_set_answer(ldns_pkt *p, ldns_rr_list *rr)
directly set the answer section
Definition packet.c:521
ldns_pkt_set_question
void ldns_pkt_set_question(ldns_pkt *p, ldns_rr_list *rr)
directly set the question section
Definition packet.c:515
ldns_pkt_new
ldns_pkt * ldns_pkt_new(void)
allocates and initializes a ldns_pkt structure.
Definition packet.c:843
ldns_pkt_set_tc
void ldns_pkt_set_tc(ldns_pkt *p, signed char b)
Set the packet's tc bit.
ldns_pkt_set_edns_do
void ldns_pkt_set_edns_do(ldns_pkt *packet, signed char value)
Set the packet's edns do bit.
ldns_pkt_ra
signed char ldns_pkt_ra(const ldns_pkt *p)
Read the packet's ra bit.
Definition packet.c:76
ldns_pkt_opcode
enum ldns_enum_pkt_opcode ldns_pkt_opcode
Definition packet.h:53
ldns_pkt_set_rcode
void ldns_pkt_set_rcode(ldns_pkt *p, uint8_t c)
Set the packet's response code.
Definition packet.c:557
ldns_pkt_set_edns_z
void ldns_pkt_set_edns_z(ldns_pkt *packet, uint16_t z)
Set the packet's edns z value.
Definition packet.c:630
ldns_pkt_all
ldns_rr_list * ldns_pkt_all(const ldns_pkt *p)
Return the packet's question, answer, authority and additional sections concatenated,...
Definition packet.c:149
ldns_pkt_section
enum ldns_enum_pkt_section ldns_pkt_section
Definition packet.h:287
ldns_pkt_edns_data
ldns_rdf * ldns_pkt_edns_data(const ldns_pkt *packet)
return the packet's EDNS data
Definition packet.c:260
ldns_pkt_edns_extended_rcode
uint8_t ldns_pkt_edns_extended_rcode(const ldns_pkt *packet)
return the packet's edns extended rcode
Definition packet.c:213
ldns_pkt_set_qdcount
void ldns_pkt_set_qdcount(ldns_pkt *p, uint16_t c)
Set the packet's qd count.
Definition packet.c:563
ldns_pkt_qdcount
uint16_t ldns_pkt_qdcount(const ldns_pkt *p)
Return the packet's qd count.
Definition packet.c:100
ldns_pkt_cd
signed char ldns_pkt_cd(const ldns_pkt *p)
Read the packet's cd bit.
Definition packet.c:70
ldns_pkt_set_edns_data
void ldns_pkt_set_edns_data(ldns_pkt *packet, ldns_rdf *data)
Set the packet's EDNS data.
Definition packet.c:636
ldns_pkt_clone
ldns_pkt * ldns_pkt_clone(const ldns_pkt *pkt)
clones the given packet, creating a fully allocated copy
Definition packet.c:1216
ldns_pkt_reply_type
ldns_pkt_type ldns_pkt_reply_type(const ldns_pkt *p)
looks inside the packet to determine what kind of packet it is, AUTH, NXDOMAIN, REFERRAL,...
Definition packet.c:1170
ldns_pkt_set_arcount
void ldns_pkt_set_arcount(ldns_pkt *p, uint16_t c)
Set the packet's arcount.
Definition packet.c:581
ldns_pkt_tsig
ldns_rr * ldns_pkt_tsig(const ldns_pkt *p)
Return the packet's tsig pseudo rr's.
Definition packet.c:465
ldns_pkt_set_opcode
void ldns_pkt_set_opcode(ldns_pkt *p, ldns_pkt_opcode c)
Set the packet's opcode.
Definition packet.c:551
ldns_pkt_get_opcode
ldns_pkt_opcode ldns_pkt_get_opcode(const ldns_pkt *p)
Read the packet's code.
Definition packet.c:88
ldns_pkt_edns_do
signed char ldns_pkt_edns_do(const ldns_pkt *packet)
return the packet's edns do bit
Definition packet.c:231
ldns_pkt_arcount
uint16_t ldns_pkt_arcount(const ldns_pkt *p)
Return the packet's ar count.
Definition packet.c:118
ldns_pkt_set_id
void ldns_pkt_set_id(ldns_pkt *p, uint16_t id)
Set the packet's id.
Definition packet.c:471
ldns_pkt_query_new_frm_str
ldns_status ldns_pkt_query_new_frm_str(ldns_pkt **p, 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.
Definition packet.c:1083
ldns_pkt_set_querytime
void ldns_pkt_set_querytime(ldns_pkt *p, uint32_t t)
Set the packet's query time.
Definition packet.c:587
ldns_pkt_set_random_id
void ldns_pkt_set_random_id(ldns_pkt *p)
Set the packet's id to a random value.
Definition packet.c:477
ldns_pkt_set_ancount
void ldns_pkt_set_ancount(ldns_pkt *p, uint16_t c)
Set the packet's an count.
Definition packet.c:569
ldns_pkt_set_ra
void ldns_pkt_set_ra(ldns_pkt *p, signed char b)
Set the packet's ra bit.
ldns_pkt_set_tsig
void ldns_pkt_set_tsig(ldns_pkt *p, ldns_rr *t)
Set the packet's tsig rr.
Definition packet.c:672
ldns_pkt_set_edns_extended_rcode
void ldns_pkt_set_edns_extended_rcode(ldns_pkt *packet, uint8_t c)
Set the packet's edns extended rcode.
Definition packet.c:618
ldns_pkt_qr
signed char ldns_pkt_qr(const ldns_pkt *p)
Read the packet's qr bit.
Definition packet.c:46
ldns_pkt_timestamp
struct timeval ldns_pkt_timestamp(const ldns_pkt *p)
Return the packet's timestamp.
Definition packet.c:201
ldns_enum_pkt_section
ldns_enum_pkt_section
The sections of a packet.
Definition packet.h:277
LDNS_SECTION_ANY
@ LDNS_SECTION_ANY
bogus section, if not interested
Definition packet.h:283
LDNS_SECTION_QUESTION
@ LDNS_SECTION_QUESTION
Definition packet.h:278
LDNS_SECTION_ANSWER
@ LDNS_SECTION_ANSWER
Definition packet.h:279
LDNS_SECTION_ADDITIONAL
@ LDNS_SECTION_ADDITIONAL
Definition packet.h:281
LDNS_SECTION_AUTHORITY
@ LDNS_SECTION_AUTHORITY
Definition packet.h:280
LDNS_SECTION_ANY_NOQUESTION
@ LDNS_SECTION_ANY_NOQUESTION
used to get all non-question rrs from a packet
Definition packet.h:285
ldns_pkt_rd
signed char ldns_pkt_rd(const ldns_pkt *p)
Read the packet's rd bit.
Definition packet.c:64
ldns_pkt_ad
signed char ldns_pkt_ad(const ldns_pkt *p)
Read the packet's ad bit.
Definition packet.c:82
ldns_pkt_set_nscount
void ldns_pkt_set_nscount(ldns_pkt *p, uint16_t c)
Set the packet's ns count.
Definition packet.c:575
ldns_enum_pkt_rcode
ldns_enum_pkt_rcode
Definition packet.h:56
LDNS_RCODE_REFUSED
@ LDNS_RCODE_REFUSED
Definition packet.h:62
LDNS_RCODE_YXDOMAIN
@ LDNS_RCODE_YXDOMAIN
Definition packet.h:63
LDNS_RCODE_FORMERR
@ LDNS_RCODE_FORMERR
Definition packet.h:58
LDNS_RCODE_YXRRSET
@ LDNS_RCODE_YXRRSET
Definition packet.h:64
LDNS_RCODE_SERVFAIL
@ LDNS_RCODE_SERVFAIL
Definition packet.h:59
LDNS_RCODE_NOTIMPL
@ LDNS_RCODE_NOTIMPL
Definition packet.h:61
LDNS_RCODE_NXRRSET
@ LDNS_RCODE_NXRRSET
Definition packet.h:65
LDNS_RCODE_NOTZONE
@ LDNS_RCODE_NOTZONE
Definition packet.h:67
LDNS_RCODE_NXDOMAIN
@ LDNS_RCODE_NXDOMAIN
Definition packet.h:60
LDNS_RCODE_NOTAUTH
@ LDNS_RCODE_NOTAUTH
Definition packet.h:66
LDNS_RCODE_NOERROR
@ LDNS_RCODE_NOERROR
Definition packet.h:57
ldns_pkt_edns_z
uint16_t ldns_pkt_edns_z(const ldns_pkt *packet)
return the packet's edns z value
Definition packet.c:225
ldns_pkt_rr_list_by_name_and_type
ldns_rr_list * ldns_pkt_rr_list_by_name_and_type(const ldns_pkt *packet, const ldns_rdf *ownername, ldns_rr_type type, ldns_pkt_section sec)
return all the rr with a specific type and type from a packet.
Definition packet.c:340
ldns_pkt_set_section_count
void ldns_pkt_set_section_count(ldns_pkt *p, ldns_pkt_section s, uint16_t x)
Set a packet's section count to x.
Definition packet.c:651
ldns_enum_pkt_type
ldns_enum_pkt_type
The different types of packets.
Definition packet.h:292
LDNS_PACKET_QUESTION
@ LDNS_PACKET_QUESTION
Definition packet.h:293
LDNS_PACKET_REFERRAL
@ LDNS_PACKET_REFERRAL
Definition packet.h:294
LDNS_PACKET_UNKNOWN
@ LDNS_PACKET_UNKNOWN
Definition packet.h:298
LDNS_PACKET_NODATA
@ LDNS_PACKET_NODATA
Definition packet.h:297
LDNS_PACKET_NXDOMAIN
@ LDNS_PACKET_NXDOMAIN
Definition packet.h:296
LDNS_PACKET_ANSWER
@ LDNS_PACKET_ANSWER
Definition packet.h:295
ldns_pkt_get_rcode
ldns_pkt_rcode ldns_pkt_get_rcode(const ldns_pkt *p)
Return the packet's response code.
Definition packet.c:94
ldns_pkt_edns_udp_size
uint16_t ldns_pkt_edns_udp_size(const ldns_pkt *packet)
return the packet's edns udp size
Definition packet.c:207
ldns_pkt_set_edns_version
void ldns_pkt_set_edns_version(ldns_pkt *packet, uint8_t v)
Set the packet's edns version.
Definition packet.c:624
ldns_pkt_set_edns_unassigned
void ldns_pkt_set_edns_unassigned(ldns_pkt *packet, uint16_t value)
Set the packet's EDNS header bits that are unassigned.
Definition packet.c:253
rr.h
Contains the definition of ldns_rr and functions to manipulate those.
ldns_rr_type
enum ldns_enum_rr_type ldns_rr_type
Definition rr.h:251
ldns_rr_class
enum ldns_enum_rr_class ldns_rr_class
Definition rr.h:61
ldns_struct_edns_option_list
Definition edns.h:109
ldns_struct_hdr
Definition packet.h:194
ldns_struct_hdr::_rd
signed char _rd
Recursion desired.
Definition packet.h:204
ldns_struct_hdr::_id
uint16_t _id
Id of a packet.
Definition packet.h:196
ldns_struct_hdr::_opcode
ldns_pkt_opcode _opcode
Query type.
Definition packet.h:212
ldns_struct_hdr::_cd
signed char _cd
Checking disabled.
Definition packet.h:206
ldns_struct_hdr::_ra
signed char _ra
Recursion available.
Definition packet.h:208
ldns_struct_hdr::_ancount
uint16_t _ancount
answer sec
Definition packet.h:218
ldns_struct_hdr::_qr
signed char _qr
Query bit (0=query, 1=answer)
Definition packet.h:198
ldns_struct_hdr::_tc
signed char _tc
Packet truncated.
Definition packet.h:202
ldns_struct_hdr::_ad
signed char _ad
Authentic data.
Definition packet.h:210
ldns_struct_hdr::_qdcount
uint16_t _qdcount
question sec
Definition packet.h:216
ldns_struct_hdr::_arcount
uint16_t _arcount
add sec
Definition packet.h:222
ldns_struct_hdr::_rcode
uint8_t _rcode
Response code.
Definition packet.h:214
ldns_struct_hdr::_nscount
uint16_t _nscount
auth sec
Definition packet.h:220
ldns_struct_hdr::_aa
signed char _aa
Authoritative answer.
Definition packet.h:200
ldns_struct_pkt
DNS packet.
Definition packet.h:235
ldns_struct_pkt::timestamp
struct timeval timestamp
Timestamp of the time the packet was sent or created.
Definition packet.h:242
ldns_struct_pkt::_edns_extended_rcode
uint8_t _edns_extended_rcode
EDNS0 Extended rcode.
Definition packet.h:252
ldns_struct_pkt::_authority
ldns_rr_list * _authority
Authority section.
Definition packet.h:268
ldns_struct_pkt::_header
ldns_hdr * _header
Header section.
Definition packet.h:237
ldns_struct_pkt::_querytime
uint32_t _querytime
The duration of the query this packet is an answer to.
Definition packet.h:244
ldns_struct_pkt::_edns_udp_size
uint16_t _edns_udp_size
EDNS0 available buffer size, see RFC2671.
Definition packet.h:250
ldns_struct_pkt::_answerfrom
ldns_rdf * _answerfrom
an rdf (A or AAAA) with the IP address of the server it is from
Definition packet.h:240
ldns_struct_pkt::_edns_present
uint8_t _edns_present
Definition packet.h:256
ldns_struct_pkt::_edns_version
uint8_t _edns_version
EDNS Version.
Definition packet.h:254
ldns_struct_pkt::_size
size_t _size
The size of the wire format of the packet in octets.
Definition packet.h:246
ldns_struct_pkt::_answer
ldns_rr_list * _answer
Answer section.
Definition packet.h:266
ldns_struct_pkt::_edns_data
ldns_rdf * _edns_data
Arbitrary EDNS rdata.
Definition packet.h:260
ldns_struct_pkt::_edns_list
ldns_edns_option_list * _edns_list
Structed EDNS data.
Definition packet.h:262
ldns_struct_pkt::_edns_z
uint16_t _edns_z
Reserved EDNS data bits.
Definition packet.h:258
ldns_struct_pkt::_additional
ldns_rr_list * _additional
Additional section.
Definition packet.h:270
ldns_struct_pkt::_tsig_rr
ldns_rr * _tsig_rr
Optional tsig rr.
Definition packet.h:248
ldns_struct_pkt::_question
ldns_rr_list * _question
Question section.
Definition packet.h:264
ldns_struct_rdf
Resource record data field.
Definition rdata.h:197
ldns_struct_rr_list
List or Set of Resource Records.
Definition rr.h:346
ldns_struct_rr
Resource Record.
Definition rr.h:318