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

1.1.1.2 ! misho       1: /* dnsmasq is Copyright (c) 2000-2014 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
                     19: 
                     20: #define IN6ADDRSZ       16
                     21: #define INADDRSZ        4
                     22: 
                     23: #define PACKETSZ       512             /* maximum packet size */
                     24: #define MAXDNAME       1025            /* maximum presentation domain name */
                     25: #define RRFIXEDSZ      10              /* #/bytes of fixed data in r record */
                     26: #define MAXLABEL        63              /* maximum length of domain label */
                     27: 
                     28: #define NOERROR                0               /* no error */
                     29: #define FORMERR                1               /* format error */
                     30: #define SERVFAIL       2               /* server failure */
                     31: #define NXDOMAIN       3               /* non existent domain */
                     32: #define NOTIMP         4               /* not implemented */
                     33: #define REFUSED                5               /* query refused */
                     34: 
                     35: #define QUERY           0               /* opcode */
                     36: 
                     37: #define C_IN            1               /* the arpa internet */
                     38: #define C_CHAOS         3               /* for chaos net (MIT) */
1.1.1.2 ! misho      39: #define C_HESIOD        4               /* hesiod */
1.1       misho      40: #define C_ANY           255             /* wildcard match */
                     41: 
                     42: #define T_A            1
1.1.1.2 ! misho      43: #define T_NS            2
        !            44: #define T_MD            3
        !            45: #define T_MF            4             
1.1       misho      46: #define T_CNAME                5
                     47: #define T_SOA          6
1.1.1.2 ! misho      48: #define T_MB            7
        !            49: #define T_MG            8
        !            50: #define T_MR            9
1.1       misho      51: #define T_PTR          12
1.1.1.2 ! misho      52: #define T_MINFO         14
1.1       misho      53: #define T_MX           15
                     54: #define T_TXT          16
1.1.1.2 ! misho      55: #define T_RP            17
        !            56: #define T_AFSDB         18
        !            57: #define T_RT            21
1.1       misho      58: #define T_SIG          24
1.1.1.2 ! misho      59: #define T_PX            26
1.1       misho      60: #define T_AAAA         28
1.1.1.2 ! misho      61: #define T_NXT           30
1.1       misho      62: #define T_SRV          33
                     63: #define T_NAPTR                35
1.1.1.2 ! misho      64: #define T_KX            36
        !            65: #define T_DNAME         39
1.1       misho      66: #define T_OPT          41
1.1.1.2 ! misho      67: #define T_DS            43
        !            68: #define T_RRSIG         46
        !            69: #define T_NSEC          47
        !            70: #define T_DNSKEY        48
        !            71: #define T_NSEC3         50
1.1       misho      72: #define        T_TKEY          249             
                     73: #define        T_TSIG          250
                     74: #define T_AXFR          252
                     75: #define T_MAILB                253     
                     76: #define T_ANY          255
                     77: 
1.1.1.2 ! misho      78: #define EDNS0_OPTION_MAC            65001 /* dyndns.org temporary assignment */
        !            79: #define EDNS0_OPTION_CLIENT_SUBNET  8     /* IANA */
        !            80: 
1.1       misho      81: struct dns_header {
                     82:   u16 id;
                     83:   u8  hb3,hb4;
                     84:   u16 qdcount,ancount,nscount,arcount;
                     85: };
                     86: 
                     87: #define HB3_QR       0x80
                     88: #define HB3_OPCODE   0x78
                     89: #define HB3_AA       0x04
                     90: #define HB3_TC       0x02
                     91: #define HB3_RD       0x01
                     92: 
                     93: #define HB4_RA       0x80
                     94: #define HB4_AD       0x20
                     95: #define HB4_CD       0x10
                     96: #define HB4_RCODE    0x0f
                     97: 
                     98: #define OPCODE(x)          (((x)->hb3 & HB3_OPCODE) >> 3)
1.1.1.2 ! misho      99: #define SET_OPCODE(x, code) (x)->hb3 = ((x)->hb3 & ~HB3_OPCODE) | code
        !           100: 
1.1       misho     101: #define RCODE(x)           ((x)->hb4 & HB4_RCODE)
                    102: #define SET_RCODE(x, code) (x)->hb4 = ((x)->hb4 & ~HB4_RCODE) | code
                    103:   
                    104: #define GETSHORT(s, cp) { \
                    105:        unsigned char *t_cp = (unsigned char *)(cp); \
                    106:        (s) = ((u16)t_cp[0] << 8) \
                    107:            | ((u16)t_cp[1]) \
                    108:            ; \
                    109:        (cp) += 2; \
                    110: }
                    111: 
                    112: #define GETLONG(l, cp) { \
                    113:        unsigned char *t_cp = (unsigned char *)(cp); \
                    114:        (l) = ((u32)t_cp[0] << 24) \
                    115:            | ((u32)t_cp[1] << 16) \
                    116:            | ((u32)t_cp[2] << 8) \
                    117:            | ((u32)t_cp[3]) \
                    118:            ; \
                    119:        (cp) += 4; \
                    120: }
                    121: 
                    122: #define PUTSHORT(s, cp) { \
                    123:        u16 t_s = (u16)(s); \
                    124:        unsigned char *t_cp = (unsigned char *)(cp); \
                    125:        *t_cp++ = t_s >> 8; \
                    126:        *t_cp   = t_s; \
                    127:        (cp) += 2; \
                    128: }
                    129: 
                    130: #define PUTLONG(l, cp) { \
                    131:        u32 t_l = (u32)(l); \
                    132:        unsigned char *t_cp = (unsigned char *)(cp); \
                    133:        *t_cp++ = t_l >> 24; \
                    134:        *t_cp++ = t_l >> 16; \
                    135:        *t_cp++ = t_l >> 8; \
                    136:        *t_cp   = t_l; \
                    137:        (cp) += 4; \
                    138: }
                    139: 
1.1.1.2 ! misho     140: #define CHECK_LEN(header, pp, plen, len) \
        !           141:     ((size_t)((pp) - (unsigned char *)(header) + (len)) <= (plen))
        !           142: 
        !           143: #define ADD_RDLEN(header, pp, plen, len) \
        !           144:   (!CHECK_LEN(header, pp, plen, len) ? 0 : (((pp) += (len)), 1))

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