File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dnsmasq / src / dns-protocol.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 29 19:37:40 2013 UTC (10 years, 11 months ago) by misho
Branches: elwix, dnsmasq, MAIN
CVS tags: v2_66p0, v2_66, HEAD
dnsmasq

    1: /* dnsmasq is Copyright (c) 2000-2013 Simon Kelley
    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) */
   39: #define C_ANY           255             /* wildcard match */
   40: 
   41: #define T_A		1
   42: #define T_NS            2               
   43: #define T_CNAME		5
   44: #define T_SOA		6
   45: #define T_PTR		12
   46: #define T_MX		15
   47: #define T_TXT		16
   48: #define T_SIG		24
   49: #define T_AAAA		28
   50: #define T_SRV		33
   51: #define T_NAPTR		35
   52: #define T_OPT		41
   53: #define	T_TKEY		249		
   54: #define	T_TSIG		250
   55: #define T_AXFR          252
   56: #define T_MAILB		253	
   57: #define T_ANY		255
   58: 
   59: struct dns_header {
   60:   u16 id;
   61:   u8  hb3,hb4;
   62:   u16 qdcount,ancount,nscount,arcount;
   63: };
   64: 
   65: #define HB3_QR       0x80
   66: #define HB3_OPCODE   0x78
   67: #define HB3_AA       0x04
   68: #define HB3_TC       0x02
   69: #define HB3_RD       0x01
   70: 
   71: #define HB4_RA       0x80
   72: #define HB4_AD       0x20
   73: #define HB4_CD       0x10
   74: #define HB4_RCODE    0x0f
   75: 
   76: #define OPCODE(x)          (((x)->hb3 & HB3_OPCODE) >> 3)
   77: #define RCODE(x)           ((x)->hb4 & HB4_RCODE)
   78: #define SET_RCODE(x, code) (x)->hb4 = ((x)->hb4 & ~HB4_RCODE) | code
   79:   
   80: #define GETSHORT(s, cp) { \
   81: 	unsigned char *t_cp = (unsigned char *)(cp); \
   82: 	(s) = ((u16)t_cp[0] << 8) \
   83: 	    | ((u16)t_cp[1]) \
   84: 	    ; \
   85: 	(cp) += 2; \
   86: }
   87: 
   88: #define GETLONG(l, cp) { \
   89: 	unsigned char *t_cp = (unsigned char *)(cp); \
   90: 	(l) = ((u32)t_cp[0] << 24) \
   91: 	    | ((u32)t_cp[1] << 16) \
   92: 	    | ((u32)t_cp[2] << 8) \
   93: 	    | ((u32)t_cp[3]) \
   94: 	    ; \
   95: 	(cp) += 4; \
   96: }
   97: 
   98: #define PUTSHORT(s, cp) { \
   99: 	u16 t_s = (u16)(s); \
  100: 	unsigned char *t_cp = (unsigned char *)(cp); \
  101: 	*t_cp++ = t_s >> 8; \
  102: 	*t_cp   = t_s; \
  103: 	(cp) += 2; \
  104: }
  105: 
  106: #define PUTLONG(l, cp) { \
  107: 	u32 t_l = (u32)(l); \
  108: 	unsigned char *t_cp = (unsigned char *)(cp); \
  109: 	*t_cp++ = t_l >> 24; \
  110: 	*t_cp++ = t_l >> 16; \
  111: 	*t_cp++ = t_l >> 8; \
  112: 	*t_cp   = t_l; \
  113: 	(cp) += 4; \
  114: }
  115: 

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