55#define RIP_NS_PACKETSZ 512
56#define RIP_NS_UDP_MAXMSG 4096
57#define RIP_NS_MAXMSG 65535
58#define RIP_NS_MAXCDNAME 255
59#define RIP_NS_MAXLABEL 63
60#define RIP_NS_QFIXEDSZ 4
61#define RIP_NS_RRFIXEDSZ 10
62#define RIP_NS_INT32SZ 4
63#define RIP_NS_INT16SZ 2
64#define RIP_NS_INT8SZ 1
65#define RIP_NS_INADDRSZ 4
66#define RIP_NS_IN6ADDRSZ 16
67#define RIP_NS_CMPRSFLGS 0xc0
70#define RIP_NS_RESP_MAX_ANSW 128
73#define RIP_NS_RESP_MAX_NS 16
78#define RIP_NS_RESP_MAX_ADDL 128
80#define RIP_NS_CDNAME_COMP_BUF_LEN 256
111 rip_ns_r_noerror = 0,
125 rip_ns_r_badvers = 16,
127 rip_ns_r_badsig = 16,
128 rip_ns_r_badkey = 17,
129 rip_ns_r_badtime = 18,
132 rip_ns_r_rip_unknown = -1,
133 rip_ns_r_rip_shortheader = -2,
134 rip_ns_r_rip_toolarge = -3,
135 rip_ns_r_rip_query_tc = -4,
136 rip_ns_r_rip_pack_rr_err = -5,
143 rip_ns_t_invalid = 0,
166 rip_ns_t_nsap_ptr = 23,
175 rip_ns_t_nimloc = 32,
188 rip_ns_t_ipseckey = 45,
191 rip_ns_t_dnskey = 48,
194 rip_ns_t_nsec3param = 51,
196 rip_ns_t_smimea = 53,
200 rip_ns_t_talink = 58,
202 rip_ns_t_cdnskey = 60,
203 rip_ns_t_openpgpkey = 61,
206 rip_ns_t_uinfo = 100,
209 rip_ns_t_unspec = 103,
214 rip_ns_t_eui48 = 108,
215 rip_ns_t_eui64 = 109,
220 rip_ns_t_mailb = 253,
221 rip_ns_t_maila = 254,
227 rip_ns_t_dlv = 32769,
247 rip_ns_ext_opt_c_cs = 8,
257#if __BYTE_ORDER == __BIG_ENDIAN
271#if __BYTE_ORDER == __LITTLE_ENDIAN || __BYTE_ORDER == __PDP_ENDIAN
296#define RIP_NS_QUERY_SET_END_CODE_AND_RETURN(q, c) do { \
304#define RIP_NS_GET16(s, cp) do { \
305 const unsigned char *t_cp = (const unsigned char *)(cp); \
306 (s) = ((uint16_t)t_cp[0] << 8) \
307 | ((uint16_t)t_cp[1]) \
309 (cp) += RIP_NS_INT16SZ; \
315#define RIP_NS_PUT16(s, cp) do { \
316 uint16_t t_s = (uint16_t)(s); \
317 unsigned char *t_cp = (unsigned char *)(cp); \
318 *t_cp++ = t_s >> 8; \
320 (cp) += RIP_NS_INT16SZ; \
326#define RIP_NS_GET32(l, cp) do { \
327 const unsigned char *t_cp = (const unsigned char *)(cp); \
328 (l) = ((uint32_t)t_cp[0] << 24) \
329 | ((uint32_t)t_cp[1] << 16) \
330 | ((uint32_t)t_cp[2] << 8) \
331 | ((uint32_t)t_cp[3]) \
333 (cp) += RIP_NS_INT32SZ; \
339#define RIP_NS_PUT32(l, cp) do { \
340 uint32_t t_l = (uint32_t)(l); \
341 unsigned char *t_cp = (unsigned char *)(cp); \
342 *t_cp++ = t_l >> 24; \
343 *t_cp++ = t_l >> 16; \
344 *t_cp++ = t_l >> 8; \
346 (cp) += RIP_NS_INT32SZ; \
359 const unsigned char *src,
unsigned char *dst,
362int rip_ns_name_pack(
const unsigned char *src,
unsigned char *dst,
int dstsiz,
363 const unsigned char **dnptrs,
364 const unsigned char **lastdnptr);
366int rip_ns_name_pton(
const unsigned char *src,
unsigned char *dst,
size_t dstsiz);
370 const unsigned char *src,
unsigned char *dst,
371 size_t dstsiz, uint16_t *query_label_len);
373int rip_ns_name_put(
const unsigned char *src,
unsigned char *dst,
int dstsiz,
374 const unsigned char **dnptrs,
375 const unsigned char **lastdnptr);
enum rip_ns_class_e rip_ns_class_t
enum rip_ns_ext_opt_code_e rip_ns_ext_opt_code_t
int rip_ns_name_put(const unsigned char *src, unsigned char *dst, int dstsiz, const unsigned char **dnptrs, const unsigned char **lastdnptr)
Definition rip_ns_utils.c:209
bool rip_ns_rr_type_supported(uint16_t query_type)
Definition rip_ns_utils.c:137
int rip_ns_name_pack(const unsigned char *src, unsigned char *dst, int dstsiz, const unsigned char **dnptrs, const unsigned char **lastdnptr)
Definition rip_ns_utils.c:563
bool rip_ns_rr_class_supported(uint16_t query_class)
Definition rip_ns_utils.c:161
enum rip_ns_opcode_e rip_ns_opcode_t
rip_ns_flag_e
Definition rip_ns_utils.h:84
int rip_ns_name_ntop(const unsigned char *src, char *dst, size_t dstsiz)
Definition rip_ns_utils.c:709
enum rip_ns_flag_e rip_ns_flag_t
const char * rip_ns_rr_type_to_str(rip_ns_type_t type)
Definition rip_ns_utils.c:101
int rip_ns_name_unpack(const unsigned char *msg, const unsigned char *eom, const unsigned char *src, unsigned char *dst, size_t dstsiz)
Definition rip_ns_utils.c:284
int rip_rr_name_get(const unsigned char *msg, const unsigned char *eom, const unsigned char *src, unsigned char *dst, size_t dstsiz, uint16_t *query_label_len)
Definition rip_ns_utils.c:244
rip_ns_class_e
Definition rip_ns_utils.h:233
enum rip_ns_type_e rip_ns_type_t
void rip_ns_put16(unsigned char *dst, uint16_t num)
Definition rip_ns_utils.c:177
rip_ns_rcode_e
Definition rip_ns_utils.h:110
const char * rip_ns_class_to_str(rip_ns_class_t class)
Definition rip_ns_utils.c:116
rip_ns_type_e
Definition rip_ns_utils.h:142
rip_ns_opcode_e
Definition rip_ns_utils.h:99
enum rip_ns_rcode_e rip_ns_rcode_t
rip_ns_ext_opt_code_e
Definition rip_ns_utils.h:246
int rip_ns_name_pton(const unsigned char *src, unsigned char *dst, size_t dstsiz)
Definition rip_ns_utils.c:440
struct rip_ns_header_s rip_ns_header_t
@ rip_ns_f_tc
Definition rip_ns_utils.h:88
@ rip_ns_f_z
Definition rip_ns_utils.h:91
@ rip_ns_f_rcode
Definition rip_ns_utils.h:94
@ rip_ns_f_qr
Definition rip_ns_utils.h:85
@ rip_ns_f_rd
Definition rip_ns_utils.h:89
@ rip_ns_f_aa
Definition rip_ns_utils.h:87
@ rip_ns_f_opcode
Definition rip_ns_utils.h:86
@ rip_ns_f_ra
Definition rip_ns_utils.h:90
@ rip_ns_f_ad
Definition rip_ns_utils.h:92
@ rip_ns_f_cd
Definition rip_ns_utils.h:93
@ rip_ns_c_hs
Definition rip_ns_utils.h:238
@ rip_ns_c_any
Definition rip_ns_utils.h:241
@ rip_ns_c_chaos
Definition rip_ns_utils.h:237
@ rip_ns_c_in
Definition rip_ns_utils.h:235
@ rip_ns_c_2
Definition rip_ns_utils.h:236
@ rip_ns_c_none
Definition rip_ns_utils.h:240
@ rip_ns_c_invalid
Definition rip_ns_utils.h:234
@ rip_ns_r_refused
Definition rip_ns_utils.h:116
@ rip_ns_r_notzone
Definition rip_ns_utils.h:122
@ rip_ns_r_yxdomain
Definition rip_ns_utils.h:118
@ rip_ns_r_notimpl
Definition rip_ns_utils.h:115
@ rip_ns_r_nxrrset
Definition rip_ns_utils.h:120
@ rip_ns_r_formerr
Definition rip_ns_utils.h:112
@ rip_ns_r_rip_tcp_write_close
Definition rip_ns_utils.h:138
@ rip_ns_r_nxdomain
Definition rip_ns_utils.h:114
@ rip_ns_r_notauth
Definition rip_ns_utils.h:121
@ rip_ns_r_servfail
Definition rip_ns_utils.h:113
@ rip_ns_r_rip_tcp_write_err
Definition rip_ns_utils.h:137
@ rip_ns_r_yxrrset
Definition rip_ns_utils.h:119
@ rip_ns_o_iquery
Definition rip_ns_utils.h:101
@ rip_ns_o_update
Definition rip_ns_utils.h:105
@ rip_ns_o_query
Definition rip_ns_utils.h:100
@ rip_ns_o_status
Definition rip_ns_utils.h:102
@ rip_ns_o_notify
Definition rip_ns_utils.h:104