/*
**************************************************************************
*
* Boot-ROM-Code to load an operating system across a TCP/IP network.
*
* Module: resolve.h
* Purpose: Definitions for implementing a simple DNS name resolver
* Entries: none
*
**************************************************************************
*
* Copyright (C) 1995-2003 Gero Kuhlmann <gero@gkminix.han.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: resolve.h,v 1.4 2003/01/25 23:29:41 gkminix Exp $
*/
#ifndef _KERNEL_ARPA_RESOLVE_H
#define _KERNEL_ARPA_RESOLVE_H
#ifndef _USE_ASSEMBLER
/*
**************************************************************************
*
* Various definitions:
*/
#define MAX_LABEL_LEN 63 /* max. length of labels */
#define MAX_NAME_LEN 255 /* max. length of names */
#define DNS_UDP_LEN 512 /* max. length of UDP packets */
#define DNS_S_PORT 53 /* DNS server UDP port number */
#define DNS_C_PORT 2004 /* DNS client UDP port number */
#define MAX_NS 4 /* max. number of name servers */
#define DNS_TIMEOUT 10 /* 10 seconds timeout */
#define DNS_RETRY 3 /* 3 retries max per server */
/*
**************************************************************************
*
* DNS type values:
*/
#define DNS_TYPE_A 1 /* host address */
#define DNS_TYPE_NS 2 /* authoratative name server */
#define DNS_TYPE_MD 3 /* mail destination */
#define DNS_TYPE_MF 4 /* mail forwarder */
#define DNS_TYPE_CNAME 5 /* canonical name for an alias */
#define DNS_TYPE_SOA 6 /* start of a zone of authority */
#define DNS_TYPE_MB 7 /* mailbox domain name */
#define DNS_TYPE_MG 8 /* mail group member */
#define DNS_TYPE_MR 9 /* mail rename domain name */
#define DNS_TYPE_NULL 10 /* NULL RR */
#define DNS_TYPE_WKS 11 /* well known service */
#define DNS_TYPE_PTR 12 /* domain name pointer */
#define DNS_TYPE_HINFO 13 /* host information */
#define DNS_TYPE_MINFO 14 /* mailbox information */
#define DNS_TYPE_MX 15 /* mail exchange */
#define DNS_TYPE_TXT 16 /* text strings */
#define DNS_TYPE_ALL 255 /* all records */
/*
**************************************************************************
*
* DNS class values:
*/
#define DNS_CLASS_IN 1 /* Internet */
#define DNS_CLASS_CS 2 /* CSNET (obsolete) */
#define DNS_CLASS_CH 3 /* CHAOS */
#define DNS_CLASS_HS 4 /* Hesiod */
#define DNS_CLASS_ANY 255 /* any class */
/*
**************************************************************************
*
* DNS labels are either plain text with a length byte or consist
* of a reference offset to compress reoccurring data.
*/
#define COMPR_MASK 0xc0 /* mask for compression flags */
#define OFFSET_MASK 0x3fff /* mask for offset */
/*
**************************************************************************
*
* DNS packet header
*/
struct dnshdr
{
unsigned short xid; /* packet ID */
unsigned short flags; /* flags */
unsigned short qdcount; /* query record count */
unsigned short ancount; /* answer record count */
unsigned short nscount; /* nameserver record count */
unsigned short arcount; /* additional record count */
};
/* Header flag bit fields */
#define HEADER_QR 0x8000 /* query flag */
#define HEADER_OPCODE 0x7800 /* opcode */
#define HEADER_AA 0x0400 /* authoratative answer flag */
#define HEADER_TC 0x0200 /* packet truncated flag */
#define HEADER_RD 0x0100 /* recursion required flag */
#define HEADER_RA 0x0080 /* recursion available flag */
#define HEADER_Z 0x0070 /* reserved for future use */
#define HEADER_RCODE 0x000f /* response code */
/* Header opcode values */
#define OPCODE_QUERY 0x0000 /* standard query */
#define OPCODE_IQUERY 0x0800 /* inverse query */
#define OPCODE_STATUS 0x1000 /* server status request */
/* Header response codes */
#define RCODE_NOERR 0x0000 /* no error */
#define RCODE_FORMAT 0x0001 /* format error */
#define RCODE_SERVER 0x0002 /* server failure */
#define RCODE_NAME 0x0003 /* name error: no domain */
#define RCODE_REFUSED 0x0005 /* server refused query */
/*
**************************************************************************
*
* DNS resource record layout
*/
struct rr
{
unsigned short type; /* record type */
unsigned short class; /* record class */
unsigned long ttl; /* record time to live */
unsigned short rdlength; /* length of data in record */
};
#endif /* _USE_ASSEMBLER */
#endif /* _KERNEL_ARPA_RESOLVE_H */
syntax highlighted by Code2HTML, v. 0.9.1