📄 dns.h
字号:
/*
* FILENAME: dns.h
*
* Copyright 1997- 2000 By InterNiche Technologies Inc. All rights reserved
*
* DNS defines for NetPort IP stack.
*
* MODULE: INET
*
*
* PORTABLE: yes
*/
#ifndef _DNS_H_
#define _DNS_H_ 1
/* set defaults of DNS variables, may override in ipport.h */
#ifndef MAXDNSNAME
#define MAXDNSNAME 256 /* max length of name including domain */
#endif
#ifndef MAXDNSENTRY
#define MAXDNSENTRY 6 /* MAX entries in DNS table */
#endif
#ifndef MAXDNSUDP
#define MAXDNSUDP 512 /* MAX allowable UDP size */
#endif
#ifndef MAXDNSSERVERS
#define MAXDNSSERVERS 3 /* MAX number of servers to try */
#endif
#ifndef MAXDNSADDRS
#define MAXDNSADDRS 10 /* MAX IP addresses to return via gethostbyname() */
#endif
#ifdef DNS_CLIENT_UPDT
#define DNS_UPDT 5 /* Op code for UPDATE request */
#define DNS_TYPE_AUTHNS 2 /* Type value for Authoritative name server */
#endif /* DNS_CLIENT_UPDT */
/* basic internal structure of a client DNS entry. */
struct dns_querys
{
ulong send_time; /* ctick when last request was sent/received */
ulong expire_time; /* second (local) when this data expires */
unshort tries; /* retry count */
unshort lport; /* local (client) UDP port, for verification */
unshort id; /* ID of request, 0 == unused entry. */
int replies; /* number of replys to current request */
ip_addr ipaddr_list[MAXDNSADDRS]; /* IP addresses (net endian) */
int err; /* last ENP_ error if, if any */
int rcode; /* last response code if replys > 1 */
char dns_name[MAXDNSNAME]; /* name asked for (usually w/domain) */
char dns_alias[MAXDNSNAME]; /* name from reply */
#ifdef DNS_CLIENT_UPDT
char dns_soa[MAXDNSNAME]; /* name of authoritative server */
char type; /* type of request */
char filler;
ip_addr h_add_ipaddr; /* IN- add this ip address for host name in zone */
u_long h_ttl; /* IN- time-to-live field for UPDATE packet */
char h_z_name[MAXDNSNAME]; /* IN- zone name for UPDATE packet */
#endif /* DNS_CLIENT_UPDT */
};
/* static table for actual queries. Non-zero dhc_conn means entry is active. */
extern struct dns_querys dns_qs[MAXDNSENTRY];
/* pending requests, can be used as a flag to spin dnsc_check() task */
extern unsigned dnsc_active;
/* DNS client statistics: */
extern ulong dnsc_errors; /* protocol/implementation runtime errors */
extern ulong dnsc_requests; /* requests sent */
extern ulong dnsc_OK; /* OK replys received */
extern ulong dnsc_unks; /* error (unknown) replys received */
extern ulong dnsc_tmos; /* timeouts */
/* DNS operational parameters which can be set at run time */
extern ip_addr dns_servers[MAXDNSSERVERS];
#ifdef DNS_CLIENT_UPDT
extern char soa_mname[MAXDNSNAME];
#endif /* DNS_CLIENT_UPDT */
extern unsigned dns_firsttry; /* time to first retry, in seconds */
extern unsigned dns_trys; /* max number of retrys */
/* header format of a DNS packet over UDP */
START_PACKED_STRUCT(dns_hdr)
unshort id; /* 16 bit unique query ID */
unshort flags; /* various bit fields, see below */
unshort qdcount; /* entries in the question field */
unshort ancount; /* resource records in the answer field */
unshort nscount; /* name server resource records */
unshort arcount; /* resource records in the additional records */
END_PACKED_STRUCT(dns_hdr)
#define DNS_PORT 53 /* DNS reserved port on UDP */
/* DNS header flags field defines */
#define DNSF_QR 0x8000 /* query (0), or response (1) */
#define DNSF_OPMASK 0x7800 /* 4 bit opcode kinds of query, 0==standard */
#define DNSF_AA 0x0400 /* set if Authoritive Answers */
#define DNSF_TC 0x0200 /* set if truncated message */
#define DNSF_RD 0x0100 /* Recursion Desired bit */
#define DNSF_RA 0x0080 /* Recursion Allowed bit */
#define DNSF_Z 0x0070 /* 3 reserved bits, must be zero */
#define DNSF_RCMASK 0x000F /* Response Code mask */
/* Reponse Code values: */
#define DNSRC_OK 0 /* good response */
#define DNSRC_EFORMAT 1 /* Format error */
#define DNSRC_ESERVER 2 /* Server Error */
#define DNSRC_ENAME 3 /* Name error */
#define DNSRC_EIMP 4 /* Not Implemented on server */
#define DNSRC_EREFUSE 5 /* Server refused operation */
#ifdef DNS_CLIENT_UPDT
/* Error codes used within Dynamic DNS Update operation */
#define DNSRC_EDOMAIN 6 /* Some name that ought not to exist, exists */
#define DNSRC_ERRSET 7 /* Some RRset that ought not to exist, exists*/
#define DNSRC_ENRRSET 8 /* Some RRset that ought to exist, does not */
#define DNSRC_NOTAUTH 9 /* Server is not authoritative for the zone */
/* named in the zone section */
#define DNSRC_NOTZONE 10 /* A name used within the Update section */
/* is not within the zone denoted */
#endif /* DNS_CLIENT_UPDT */
/* DNS client external entry points: */
int dns_query(char * name, ip_addr * ip); /* start a DNS query */
int dns_lookup(ip_addr * ip, char * name); /* check query status */
void dnsc_check(void); /* spin once a second to drive retrys & timeouts */
/* flags for in_reshost(); */
#define RH_VERBOSE 0x01 /* do informational printfs */
#define RH_BLOCK 0x02 /* block with call to tk_yield() */
int in_reshost(char * host, ip_addr * address, int flags);
/* Description of data base entry for a single host. */
struct hostent
{
char * h_name; /* Official name of host. */
char **h_aliases; /* Alias list. */
int h_addrtype; /* Host address type. */
int h_length; /* Length of address. */
char **h_addr_list; /* List of addresses from name server. */
#define h_addr h_addr_list[0] /* Address, for backward compatibility. */
#ifdef DNS_CLIENT_UPDT
char * h_z_name; /* IN- zone name for UPDATE packet */
ip_addr h_add_ipaddr; /* IN- add this ip address for host name in zone */
u_long h_ttl; /* IN- time-to-live field for UPDATE packet */
int h_rcode; /* OUT- response code from UPDATE packet */
#endif /* DNS_CLIENT_UPDT */
};
/* Return entry from host data base for host with NAME. This could be
* in sockcall.h but is here because a non-TCP used may want DNS.
*/
#ifdef DNS_CLIENT_UPDT
struct hostent * gethostbyname (char * name, char type);
#else
struct hostent * gethostbyname(char * name);
#endif /* DNS_CLIENT_UPDT */
#endif /* _DNS_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -