📄 dns.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 + -