Annotation of embedaddon/dnsmasq/src/dns-protocol.h, revision 1.1.1.4

1.1.1.4 ! misho       1: /* dnsmasq is Copyright (c) 2000-2021 Simon Kelley
1.1       misho       2: 
                      3:    This program is free software; you can redistribute it and/or modify
                      4:    it under the terms of the GNU General Public License as published by
                      5:    the Free Software Foundation; version 2 dated June, 1991, or
                      6:    (at your option) version 3 dated 29 June, 2007.
                      7:  
                      8:    This program is distributed in the hope that it will be useful,
                      9:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     10:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     11:    GNU General Public License for more details.
                     12:      
                     13:    You should have received a copy of the GNU General Public License
                     14:    along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     15: */
                     16: 
                     17: #define NAMESERVER_PORT 53
                     18: #define TFTP_PORT       69
1.1.1.4 ! misho      19: #define MIN_PORT        1024           /* first non-reserved port */
1.1.1.3   misho      20: #define MAX_PORT        65535u
1.1       misho      21: 
                     22: #define IN6ADDRSZ       16
                     23: #define INADDRSZ        4
                     24: 
                     25: #define PACKETSZ       512             /* maximum packet size */
                     26: #define MAXDNAME       1025            /* maximum presentation domain name */
                     27: #define RRFIXEDSZ      10              /* #/bytes of fixed data in r record */
                     28: #define MAXLABEL        63              /* maximum length of domain label */
                     29: 
                     30: #define NOERROR                0               /* no error */
                     31: #define FORMERR                1               /* format error */
                     32: #define SERVFAIL       2               /* server failure */
                     33: #define NXDOMAIN       3               /* non existent domain */
                     34: #define NOTIMP         4               /* not implemented */
                     35: #define REFUSED                5               /* query refused */
                     36: 
                     37: #define QUERY           0               /* opcode */
                     38: 
                     39: #define C_IN            1               /* the arpa internet */
                     40: #define C_CHAOS         3               /* for chaos net (MIT) */
1.1.1.2   misho      41: #define C_HESIOD        4               /* hesiod */
1.1       misho      42: #define C_ANY           255             /* wildcard match */
                     43: 
                     44: #define T_A            1
1.1.1.2   misho      45: #define T_NS            2
                     46: #define T_MD            3
                     47: #define T_MF            4             
1.1       misho      48: #define T_CNAME                5
                     49: #define T_SOA          6
1.1.1.2   misho      50: #define T_MB            7
                     51: #define T_MG            8
                     52: #define T_MR            9
1.1       misho      53: #define T_PTR          12
1.1.1.2   misho      54: #define T_MINFO         14
1.1       misho      55: #define T_MX           15
                     56: #define T_TXT          16
1.1.1.2   misho      57: #define T_RP            17
                     58: #define T_AFSDB         18
                     59: #define T_RT            21
1.1       misho      60: #define T_SIG          24
1.1.1.2   misho      61: #define T_PX            26
1.1       misho      62: #define T_AAAA         28
1.1.1.2   misho      63: #define T_NXT           30
1.1       misho      64: #define T_SRV          33
                     65: #define T_NAPTR                35
1.1.1.2   misho      66: #define T_KX            36
                     67: #define T_DNAME         39
1.1       misho      68: #define T_OPT          41
1.1.1.2   misho      69: #define T_DS            43
                     70: #define T_RRSIG         46
                     71: #define T_NSEC          47
                     72: #define T_DNSKEY        48
                     73: #define T_NSEC3         50
1.1       misho      74: #define        T_TKEY          249             
                     75: #define        T_TSIG          250
                     76: #define T_AXFR          252
                     77: #define T_MAILB                253     
                     78: #define T_ANY          255
1.1.1.4 ! misho      79: #define T_CAA           257
1.1       misho      80: 
1.1.1.2   misho      81: #define EDNS0_OPTION_MAC            65001 /* dyndns.org temporary assignment */
                     82: #define EDNS0_OPTION_CLIENT_SUBNET  8     /* IANA */
1.1.1.3   misho      83: #define EDNS0_OPTION_NOMDEVICEID    65073 /* Nominum temporary assignment */
                     84: #define EDNS0_OPTION_NOMCPEID       65074 /* Nominum temporary assignment */
1.1.1.2   misho      85: 
1.1       misho      86: struct dns_header {
                     87:   u16 id;
                     88:   u8  hb3,hb4;
                     89:   u16 qdcount,ancount,nscount,arcount;
                     90: };
                     91: 
1.1.1.3   misho      92: #define HB3_QR       0x80 /* Query */
1.1       misho      93: #define HB3_OPCODE   0x78
1.1.1.3   misho      94: #define HB3_AA       0x04 /* Authoritative Answer */
                     95: #define HB3_TC       0x02 /* TrunCated */
                     96: #define HB3_RD       0x01 /* Recursion Desired */
                     97: 
                     98: #define HB4_RA       0x80 /* Recursion Available */
                     99: #define HB4_AD       0x20 /* Authenticated Data */
                    100: #define HB4_CD       0x10 /* Checking Disabled */
1.1       misho     101: #define HB4_RCODE    0x0f
                    102: 
                    103: #define OPCODE(x)          (((x)->hb3 & HB3_OPCODE) >> 3)
1.1.1.2   misho     104: #define SET_OPCODE(x, code) (x)->hb3 = ((x)->hb3 & ~HB3_OPCODE) | code
                    105: 
1.1       misho     106: #define RCODE(x)           ((x)->hb4 & HB4_RCODE)
                    107: #define SET_RCODE(x, code) (x)->hb4 = ((x)->hb4 & ~HB4_RCODE) | code
                    108:   
                    109: #define GETSHORT(s, cp) { \
                    110:        unsigned char *t_cp = (unsigned char *)(cp); \
                    111:        (s) = ((u16)t_cp[0] << 8) \
                    112:            | ((u16)t_cp[1]) \
                    113:            ; \
                    114:        (cp) += 2; \
                    115: }
                    116: 
                    117: #define GETLONG(l, cp) { \
                    118:        unsigned char *t_cp = (unsigned char *)(cp); \
                    119:        (l) = ((u32)t_cp[0] << 24) \
                    120:            | ((u32)t_cp[1] << 16) \
                    121:            | ((u32)t_cp[2] << 8) \
                    122:            | ((u32)t_cp[3]) \
                    123:            ; \
                    124:        (cp) += 4; \
                    125: }
                    126: 
                    127: #define PUTSHORT(s, cp) { \
                    128:        u16 t_s = (u16)(s); \
                    129:        unsigned char *t_cp = (unsigned char *)(cp); \
                    130:        *t_cp++ = t_s >> 8; \
                    131:        *t_cp   = t_s; \
                    132:        (cp) += 2; \
                    133: }
                    134: 
                    135: #define PUTLONG(l, cp) { \
                    136:        u32 t_l = (u32)(l); \
                    137:        unsigned char *t_cp = (unsigned char *)(cp); \
                    138:        *t_cp++ = t_l >> 24; \
                    139:        *t_cp++ = t_l >> 16; \
                    140:        *t_cp++ = t_l >> 8; \
                    141:        *t_cp   = t_l; \
                    142:        (cp) += 4; \
                    143: }
                    144: 
1.1.1.2   misho     145: #define CHECK_LEN(header, pp, plen, len) \
                    146:     ((size_t)((pp) - (unsigned char *)(header) + (len)) <= (plen))
                    147: 
                    148: #define ADD_RDLEN(header, pp, plen, len) \
                    149:   (!CHECK_LEN(header, pp, plen, len) ? 0 : (((pp) += (len)), 1))
1.1.1.3   misho     150: 
                    151: /* Escape character in our presentation format for names.
                    152:    Cannot be '.' or /000 and must be !isprint().
                    153:    Note that escaped chars are stored as
                    154:    <NAME_ESCAPE> <orig-char+1>
                    155:    to ensure that the escaped form of /000 doesn't include /000
                    156: */
                    157: #define NAME_ESCAPE 1

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>