1 #ifndef DNS_H 2 #define DNS_H 3 4 #define DNS_CLASS_IN 1 5 #define DNS_CLASS_CH 3 6 #define DNS_CLASS_HS 4 7 #define DNS_CLASS_NONE 254 8 #define DNS_CLASS_ALL 255 9 10 #define DNS_TYPE_ALL 255 11 12 #define DNS_TYPE_IN_A 1 13 #define DNS_TYPE_IN_NS 2 14 /* ... */ 15 #define DNS_TYPE_IN_CNAME 5 16 #define DNS_TYPE_IN_SOA 6 17 /* ... */ 18 /* #define DNS_TYPE_IN_WKS 11 */ 19 #define DNS_TYPE_IN_PTR 12 20 #define DNS_TYPE_IN_HINFO 13 21 /* ... */ 22 #define DNS_TYPE_IN_MX 15 23 #define DNS_TYPE_IN_TXT 16 24 /* ... */ 25 #define DNS_TYPE_IN_AAAA 28 26 #define DNS_TYPE_IN_SRV 33 27 /* ... */ 28 /* #define DNS_TYPE_IN_A6 38 -- experimental again */ 29 /* ... */ 30 #define DNS_TYPE_IN_IXFR 251 31 #define DNS_TYPE_IN_AXFR 252 32 33 34 #define DNS_TYPE_CH_A 1 35 #define DNS_TYPE_CH_TXT 16 /* version.bind */ 36 37 #define DNS_HDR_QR (1U<<15) 38 #define DNS_HDR_OPCOFF (11) 39 #define DNS_HDR_OPCMASK (15U<<DNS_HDR_OPCOFF) 40 #define DNS_HDR_OPC_QUERY ( 0U<<DNS_HDR_OPCOFF) 41 #define DNS_HDR_OPC_IQUERY ( 1U<<DNS_HDR_OPCOFF) 42 #define DNS_HDR_OPC_STATUS ( 2U<<DNS_HDR_OPCOFF) 43 #define DNS_HDR_OPC_NOTIFY ( 4U<<DNS_HDR_OPCOFF) 44 #define DNS_HDR_OPC_UPDATE ( 5U<<DNS_HDR_OPCOFF) 45 #define DNS_HDR_AA (1U<<10) 46 #define DNS_HDR_TC (1U<<9) 47 #define DNS_HDR_RD (1U<<8) 48 #define DNS_HDR_RA (1U<<7) 49 #define DNS_HDR_ZOFF (4) 50 #define DNS_HDR_ZMASK (0x7U<<DNS_HDR_ZOFF) 51 #define DNS_HDR_ROFF (0) 52 #define DNS_HDR_RMASK (0xFU<<DNS_HDR_ROFF) 53 #define DNS_HDR_R_NONE ( 0U<<DNS_HDR_ROFF) 54 #define DNS_HDR_R_BFMT ( 1U<<DNS_HDR_ROFF) 55 #define DNS_HDR_R_SERV ( 2U<<DNS_HDR_ROFF) 56 #define DNS_HDR_R_NAME ( 3U<<DNS_HDR_ROFF) 57 #define DNS_HDR_R_NSUP ( 4U<<DNS_HDR_ROFF) 58 #define DNS_HDR_R_REFU ( 5U<<DNS_HDR_ROFF) 59 /* yxdomain 6 */ 60 /* yxrrset 7 */ 61 /* nxrrset 8 */ 62 /* notauth 9 */ 63 /* notzone 10 */ 64 65 #define DNS_HDR_RSZ (6) 66 67 #define DNS_LABEL_IS_PTR(x) ((0xC0 & (x)) == 0xC0) 68 69 struct Dns_base 70 { 71 struct Vstr_base *io_w_serv; 72 struct Vstr_base *io_w_user; 73 74 struct Vlg *io_dbg; 75 76 unsigned int opt_recur : 1; 77 }; 78 79 typedef struct Dns_base Dns_base; 80 81 extern const char *dns_name_type_ch(unsigned int num); 82 extern const char *dns_name_type_in(unsigned int num); 83 extern const char *dns_name_class(unsigned int num); 84 extern const char *dns_name_hdr_r(unsigned int num); 85 86 extern unsigned int dns_get_msg_len(Vstr_base *s1, size_t pos); 87 extern void dns_app_recq_pkt(struct Dns_base *, unsigned int qcount, ...); 88 extern void dns_dbg_prnt_pkt(struct Dns_base *, Vstr_base *pkt); 89 extern void dns_sc_ui_out(struct Dns_base *, Vstr_base *pkt); 90 91 #endif 92