⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dns.h

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 H
字号:
typedef struct Ndbtuple Ndbtuple;enum{	/* RR types; see: http://www.iana.org/assignments/dns-parameters */	Ta=			1,	Tns=		2,	Tmd=		3,	Tmf=		4,	Tcname=		5,	Tsoa=		6,	Tmb=		7,	Tmg=		8,	Tmr=		9,	Tnull=		10,	Twks=		11,	Tptr=		12,	Thinfo=		13,	Tminfo=		14,	Tmx=		15,	Ttxt=		16,	Trp=		17,	Tafsdb=		18,	Tx25=		19,	Tisdn=		20,	Trt=		21,	Tnsap=		22,	Tnsapptr=	23,	Tsig=		24,	Tkey=		25,	Tpx=		26,	Tgpos=		27,	Taaaa=		28,	Tloc=		29,	Tnxt=		30,	Teid=		31,	Tnimloc=	32,	Tsrv=		33,	Tatma=		34,	Tnaptr=		35,	Tkx=		36,	Tcert=		37,	Ta6=		38,	Tdname=		39,	Tsink=		40,	Topt=		41,	Tapl=		42,	Tds=		43,	Tsshfp=		44,	Tipseckey=	45,	Trrsig=		46,	Tnsec=		47,	Tdnskey=	48,	Tspf=		99,	Tuinfo=		100,	Tuid=		101,	Tgid=		102,	Tunspec=	103,	/* query types (all RR types are also queries) */	Ttkey=	249,	/* transaction key */	Ttsig=	250,	/* transaction signature */	Tixfr=	251,	/* incremental zone transfer */	Taxfr=	252,	/* zone transfer */	Tmailb=	253,	/* { Tmb, Tmg, Tmr } */		Tmaila= 254,	/* obsolete */	Tall=	255,	/* all records */	/* classes */	Csym=	0,	/* internal symbols */	Cin=	1,	/* internet */	Ccs,		/* CSNET (obsolete) */	Cch,		/* Chaos net */	Chs,		/* Hesiod (?) */	/* class queries (all class types are also queries) */	Call=	255,	/* all classes */	/* opcodes */	Oquery=		0<<11,		/* normal query */	Oinverse=	1<<11,		/* inverse query (retired) */	Ostatus=	2<<11,		/* status request */	Onotify=	4<<11,		/* notify slaves of updates */	Oupdate=	5<<11,	Omask=		0xf<<11,	/* mask for opcode */	/* response codes */	Rok=		0,	Rformat=	1,	/* format error */	Rserver=	2,	/* server failure (e.g. no answer from something) */	Rname=		3,	/* bad name */	Runimplimented=	4,	/* unimplemented */	Rrefused=	5,	/* we don't like you */	Ryxdomain=	6,	/* name exists when it should not */	Ryxrrset=	7,	/* rr set exists when it should not */	Rnxrrset=	8,	/* rr set that should exist does not */	Rnotauth=	9,	/* not authoritative */	Rnotzone=	10,	/* name not in zone */	Rbadvers=	16,	/* bad opt version *//*	Rbadsig=	16, */	/* also tsig signature failure */	Rbadkey=	17,		/* key not recognized */	Rbadtime=	18,		/* signature out of time window */	Rbadmode=	19,		/* bad tkey mode */	Rbadname=	20,		/* duplicate key name */	Rbadalg=	21,		/* algorithm not supported */	Rmask=		0x1f,	/* mask for response */	Rtimeout=	0x20,	/* timeout sending (for internal use only) */	/* bits in flag word (other than opcode and response) */	Fresp=		1<<15,	/* message is a response */	Fauth=		1<<10,	/* true if an authoritative response */	Ftrunc=		1<<9,	/* truncated message */	Frecurse=	1<<8,	/* request recursion */	Fcanrec=	1<<7,	/* server can recurse */	Domlen=		256,	/* max domain name length (with NULL) */	Labellen=	256,	/* max domain label length (with NULL) */	Strlen=		256,	/* max string length (with NULL) */	Iplen=		32,	/* max ascii ip address length (with NULL) */	/* time to live values (in seconds) */	Min=		60,	Hour=		60*Min,		/* */	Day=		24*Hour,	/* Ta, Tmx */	Week=		7*Day,		/* Tsoa, Tns */	Year=		52*Week,	DEFTTL=		Day,	/* reserved time (can't be timed out earlier) */	Reserved=	5*Min,	/* packet sizes */	Maxudp=		512,	/* maximum bytes per udp message */	Maxudpin=	2048,	/* maximum bytes per udp message */	/* length of domain name hash table */	HTLEN= 		4*1024,	RRmagic=	0xdeadbabe,	DNmagic=	0xa110a110,	/* parallelism */	Maxactive=	32,};typedef struct DN	DN;typedef struct DNSmsg	DNSmsg;typedef struct RR	RR;typedef struct SOA	SOA;typedef struct Area	Area;typedef struct Request	Request;typedef struct Key	Key;typedef struct Cert	Cert;typedef struct Sig	Sig;typedef struct Null	Null;typedef struct Server	Server;typedef struct Txt	Txt;/* *  a structure to track a request and any slave process handling it */struct Request{	int	isslave;	/* pid of slave */	ulong	aborttime;	/* time at which we give up */	jmp_buf	mret;		/* where master jumps to after starting a slave */	int	id;};/* *  a domain name */struct DN{	DN	*next;		/* hash collision list */	ulong	magic;	char	*name;		/* owner */	RR	*rr;		/* resource records off this name */	ulong	referenced;	/* time last referenced */	ulong	lookuptime;	/* last time we tried to get a better value */	ushort	class;		/* RR class */	char	refs;		/* for mark and sweep */	char	nonexistent;	/* true if we get an authoritative nx for this domain */	ulong	ordinal;};/* *  security info */struct Key{	int	flags;	int	proto;	int	alg;	int	dlen;	uchar	*data;};struct Cert{	int	type;	int	tag;	int	alg;	int	dlen;	uchar	*data;};struct Sig{	int	type;	int	alg;	int	labels;	ulong	ttl;	ulong	exp;	ulong	incep;	int	tag;	DN	*signer;	int	dlen;	uchar	*data;};struct Null{	int	dlen;	uchar	*data;};/* *  text strings */struct Txt{	Txt	*next;	char	*p;};/* *  an unpacked resource record */struct RR{	RR	*next;	ulong	magic;	DN	*owner;		/* domain that owns this resource record */	uchar	negative;	/* this is a cached negative response */	uintptr	pc;	ulong	ttl;		/* time to live to be passed on */	ulong	expire;		/* time this entry expires locally */	ushort	type;		/* RR type */	ushort	query;		/* query tyis is in response to */	uchar	auth;		/* authoritative */	uchar	db;		/* from database */	uchar	cached;		/* rr in cache */	ulong	marker;		/* used locally when scanning rrlists */	union {		DN	*negsoaowner;	/* soa for cached negative response */		DN	*host;	/* hostname - soa, cname, mb, md, mf, mx, ns */		DN	*cpu;	/* cpu type - hinfo */		DN	*mb;	/* mailbox - mg, minfo */		DN	*ip;	/* ip addrss - a */		DN	*rp;	/* rp arg - rp */		int	cruftlen;		ulong	arg0;	};	union {		int	negrcode;	/* response code for cached negative response */		DN	*rmb;	/* responsible maibox - minfo, soa, rp */		DN	*ptr;	/* pointer to domain name - ptr */		DN	*os;	/* operating system - hinfo */		ulong	pref;	/* preference value - mx */		ulong	local;	/* ns served from local database - ns */		ulong	arg1;	};	union {		SOA	*soa;	/* soa timers - soa */		Key	*key;		Cert	*cert;		Sig	*sig;		Null	*null;		Txt	*txt;	};};/* *  list of servers */struct Server{	Server	*next;	char	*name;};/* *  timers for a start of authenticated record */struct SOA{	ulong	serial;		/* zone serial # (sec) - soa */	ulong	refresh;	/* zone refresh interval (sec) - soa */	ulong	retry;		/* zone retry interval (sec) - soa */	ulong	expire;		/* time to expiration (sec) - soa */	ulong	minttl;		/* minimum time to live for any entry (sec) - soa */	Server	*slaves;	/* slave servers */};/* *  domain messages */struct DNSmsg{	ushort	id;	int	flags;	int	qdcount;	/* questions */	RR 	*qd;	int	ancount;	/* answers */	RR	*an;	int	nscount;	/* name servers */	RR	*ns;	int	arcount;	/* hints */	RR	*ar;};/* *  definition of local area for dblookup */struct Area{	Area		*next;	int		len;		/* strlen(area->soarr->owner->name) */	RR		*soarr;		/* soa defining this area */	int		neednotify;	int		needrefresh;};enum{	Recurse,	Dontrecurse,	NOneg,	OKneg,};/* dn.c */extern char	*rrtname[];extern char	*rname[];extern char	*opname[];extern void	db2cache(int);extern void	dninit(void);extern DN*	dnlookup(char*, int, int);extern void	dnage(DN*);extern void	dnageall(int);extern void	dnagedb(void);extern void	dnauthdb(void);extern void	dnget(void);extern void	dnpurge(void);extern void	dnput(void);extern Area*	inmyarea(char*);extern void	rrattach(RR*, int);extern RR*	rralloc(int);extern void	rrfree(RR*);extern void	rrfreelist(RR*);extern RR*	rrlookup(DN*, int, int);extern RR*	rrcat(RR**, RR*);extern RR**	rrcopy(RR*, RR**);extern RR*	rrremneg(RR**);extern RR*	rrremtype(RR**, int);extern int	rrfmt(Fmt*);extern int	rravfmt(Fmt*);extern int	rrsupported(int);extern int	rrtype(char*);extern char*	rrname(int, char*, int);extern int	tsame(int, int);extern void	dndump(char*);extern int	getactivity(Request*, int);extern void	putactivity(int);extern void	abort(); /* char*, ... */;extern void	warning(char*, ...);extern void	slave(Request*);extern void	dncheck(void*, int);extern void	unique(RR*);extern int	subsume(char*, char*);extern RR*	randomize(RR*);extern void*	emalloc(int);extern char*	estrdup(char*);extern void	dnptr(uchar*, uchar*, char*, int, int);extern void	addserver(Server**, char*);extern Server*	copyserverlist(Server*);extern void	freeserverlist(Server*);/* dnarea.c */extern void	refresh_areas(Area*);extern void	freearea(Area**);extern void	addarea(DN *dp, RR *rp, Ndbtuple *t);/* dblookup.c */extern RR*	dblookup(char*, int, int, int, int);extern RR*	dbinaddr(DN*, int);extern int	baddelegation(RR*, RR*, uchar*);extern RR*	dnsservers(int);extern RR*	domainlist(int);extern int	opendatabase(void);/* dns.c */extern char*	walkup(char*);extern RR*	getdnsservers(int);extern void	logreply(int, uchar*, DNSmsg*);extern void	logsend(int, int, uchar*, char*, char*, int);/* dnresolve.c */extern RR*	dnresolve(char*, int, int, Request*, RR**, int, int, int, int*);extern int	udpport(void);extern int	mkreq(DN *dp, int type, uchar *buf, int flags, ushort reqno);/* dnserver.c */extern void	dnserver(DNSmsg*, DNSmsg*, Request*);extern void	dnudpserver(char*);extern void	dntcpserver(char*);/* dnnotify.c */extern void	dnnotify(DNSmsg*, DNSmsg*, Request*);extern void	notifyproc(void);/* convDNS2M.c */extern int	convDNS2M(DNSmsg*, uchar*, int);/* convM2DNS.c */extern char*	convM2DNS(uchar*, int, DNSmsg*);/* malloc.c */extern void	mallocsanity(void*);extern void	lasthist(void*, int, ulong);extern int debug;extern int traceactivity;extern char	*trace;extern int	testing;	/* test cache whenever removing a DN */extern int	cachedb;extern int	needrefresh;extern char	*dbfile;extern char	mntpt[];extern char	*logfile;extern int	resolver;extern int	norecursion;extern int	maxage;		/* age of oldest entry in cache (secs) */extern char	*zonerefreshprogram;extern int	sendnotifies;extern ulong	now;		/* time base */extern Area	*owned;extern Area	*delegated;#pragma	varargck	type	"R"	RR*#pragma	varargck	type	"Q"	RR*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -