40 #include <ldns/ldns.h>
43 #define BUFFER_PKT_HEADER_SIZE 12
44 #define MAXDOMAINLEN 255
45 #define MAXLABELLEN 63
46 #define MAX_RDLENGTH 65535
48 (MAXDOMAINLEN + sizeof(uint32_t) + 4*sizeof(uint16_t) + MAX_RDLENGTH)
49 #define MAX_PACKET_SIZE 65535
50 #define PACKET_BUFFER_SIZE (MAX_PACKET_SIZE + MAX_RR_SIZE)
54 #define QR(packet) (*buffer_at((packet), 2) & QR_MASK)
55 #define QR_SET(packet) (*buffer_at((packet), 2) |= QR_MASK)
56 #define QR_CLR(packet) (*buffer_at((packet), 2) &= ~QR_MASK)
58 #define OPCODE_MASK 0x78U
59 #define OPCODE_SHIFT 3
60 #define OPCODE(packet) ((*buffer_at((packet), 2) & OPCODE_MASK) >> OPCODE_SHIFT)
61 #define OPCODE_SET(packet, opcode) \
62 (*buffer_at((packet), 2) = (*buffer_at((packet), 2) & ~OPCODE_MASK) | ((opcode) << OPCODE_SHIFT))
66 #define AA(packet) (*buffer_at((packet), 2) & AA_MASK)
67 #define AA_SET(packet) (*buffer_at((packet), 2) |= AA_MASK)
68 #define AA_CLR(packet) (*buffer_at((packet), 2) &= ~AA_MASK)
72 #define TC(packet) (*buffer_at((packet), 2) & TC_MASK)
73 #define TC_SET(packet) (*buffer_at((packet), 2) |= TC_MASK)
74 #define TC_CLR(packet) (*buffer_at((packet), 2) &= ~TC_MASK)
78 #define RD(packet) (*buffer_at((packet), 2) & RD_MASK)
79 #define RD_SET(packet) (*buffer_at((packet), 2) |= RD_MASK)
80 #define RD_CLR(packet) (*buffer_at((packet), 2) &= ~RD_MASK)
84 #define RA(packet) (*buffer_at((packet), 3) & RA_MASK)
85 #define RA_SET(packet) (*buffer_at((packet), 3) |= RA_MASK)
86 #define RA_CLR(packet) (*buffer_at((packet), 3) &= ~RA_MASK)
90 #define AD(packet) (*buffer_at((packet), 3) & AD_MASK)
91 #define AD_SET(packet) (*buffer_at((packet), 3) |= AD_MASK)
92 #define AD_CLR(packet) (*buffer_at((packet), 3) &= ~AD_MASK)
96 #define CD(packet) (*buffer_at((packet), 3) & CD_MASK)
97 #define CD_SET(packet) (*buffer_at((packet), 3) |= CD_MASK)
98 #define CD_CLR(packet) (*buffer_at((packet), 3) &= ~CD_MASK)
100 #define RCODE_MASK 0x0fU
101 #define RCODE_SHIFT 0
102 #define RCODE(packet) (*buffer_at((packet), 3) & RCODE_MASK)
103 #define RCODE_SET(packet, rcode) \
104 (*buffer_at((packet), 3) = (*buffer_at((packet), 3) & ~RCODE_MASK) | (rcode))
389 unsigned allow_pointers);
620 ldns_rr_class qclass);
665 static inline uint16_t
666 read_uint16(
const void *src)
668 #ifdef ALLOW_UNALIGNED_ACCESSES
669 return ntohs(* (uint16_t *) src);
671 uint8_t *p = (uint8_t *) src;
672 return (p[0] << 8) | p[1];
676 static inline uint32_t
677 read_uint32(
const void *src)
679 #ifdef ALLOW_UNALIGNED_ACCESSES
680 return ntohl(* (uint32_t *) src);
682 uint8_t *p = (uint8_t *) src;
683 return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
688 write_uint16(
void *dst, uint16_t data)
690 #ifdef ALLOW_UNALIGNED_ACCESSES
691 * (uint16_t *) dst = htons(data);
693 uint8_t *p = (uint8_t *) dst;
694 p[0] = (uint8_t) ((data >> 8) & 0xff);
695 p[1] = (uint8_t) (data & 0xff);
700 write_uint32(
void *dst, uint32_t data)
702 #ifdef ALLOW_UNALIGNED_ACCESSES
703 * (uint32_t *) dst = htonl(data);
705 uint8_t *p = (uint8_t *) dst;
706 p[0] = (uint8_t) ((data >> 24) & 0xff);
707 p[1] = (uint8_t) ((data >> 16) & 0xff);
708 p[2] = (uint8_t) ((data >> 8) & 0xff);
709 p[3] = (uint8_t) (data & 0xff);