URI:
       tdns.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdns.h (9028B)
       ---
            1 enum
            2 {
            3         /* RR types */
            4         Ta=        1,
            5         Tns=        2,
            6         Tmd=        3,
            7         Tmf=        4,
            8         Tcname=        5,
            9         Tsoa=        6,
           10         Tmb=        7,
           11         Tmg=        8,
           12         Tmr=        9,
           13         Tnull=        10,
           14         Twks=        11,
           15         Tptr=        12,
           16         Thinfo=        13,
           17         Tminfo=        14,
           18         Tmx=        15,
           19         Ttxt=        16,
           20         Trp=        17,
           21         Tsig=        24,
           22         Tkey=        25,
           23         Taaaa=        28,
           24         Tcert=        37,
           25 
           26         /* query types (all RR types are also queries) */
           27         Tixfr=        251,        /* incremental zone transfer */
           28         Taxfr=        252,        /* zone transfer */
           29         Tmailb=        253,        /* { Tmb, Tmg, Tmr } */
           30         Tall=        255,        /* all records */
           31 
           32         /* classes */
           33         Csym=        0,        /* internal symbols */
           34         Cin=        1,        /* internet */
           35         Ccs,                /* CSNET (obsolete) */
           36         Cch,                /* Chaos net */
           37         Chs,                /* Hesiod (?) */
           38 
           39         /* class queries (all class types are also queries) */
           40         Call=        255,        /* all classes */
           41 
           42         /* opcodes */
           43         Oquery=                0<<11,                /* normal query */
           44         Oinverse=        1<<11,                /* inverse query */
           45         Ostatus=        2<<11,                /* status request */
           46         Onotify=        4<<11,                /* notify slaves of updates */
           47         Omask=                0xf<<11,        /* mask for opcode */
           48 
           49         /* response codes */
           50         Rok=                0,
           51         Rformat=        1,        /* format error */
           52         Rserver=        2,        /* server failure (e.g. no answer from something) */
           53         Rname=                3,        /* bad name */
           54         Runimplimented=        4,        /* unimplemented */
           55         Rrefused=        5,        /* we don't like you */
           56         Rmask=                0xf,        /* mask for response */
           57         Rtimeout=        0x10,        /* timeout sending (for internal use only) */
           58 
           59         /* bits in flag word (other than opcode and response) */
           60         Fresp=                1<<15,        /* message is a response */
           61         Fauth=                1<<10,        /* true if an authoritative response */
           62         Ftrunc=                1<<9,        /* truncated message */
           63         Frecurse=        1<<8,        /* request recursion */
           64         Fcanrec=        1<<7,        /* server can recurse */
           65 
           66         Domlen=                256,        /* max domain name length (with NULL) */
           67         Labellen=        256,        /* max domain label length (with NULL) */
           68         Strlen=                256,        /* max string length (with NULL) */
           69         Iplen=                32,        /* max ascii ip address length (with NULL) */
           70 
           71         /* time to live values (in seconds) */
           72         Min=                60,
           73         Hour=                60*Min,                /* */
           74         Day=                24*Hour,        /* Ta, Tmx */
           75         Week=                7*Day,                /* Tsoa, Tns */
           76         Year=                52*Week,
           77         DEFTTL=                Day,
           78 
           79         /* reserved time (can't be timed out earlier) */
           80         Reserved=        5*Min,
           81 
           82         /* packet sizes */
           83         Maxudp=                512,        /* maximum bytes per udp message */
           84         Maxudpin=        2048,        /* maximum bytes per udp message */
           85 
           86         /* length of domain name hash table */
           87         HTLEN=                 4*1024,
           88 
           89 #define         RRmagic        0xdeadbabe
           90 #define        DNmagic        0xa110a110
           91 
           92         /* parallelism */
           93         Maxactive=        32
           94 };
           95 
           96 typedef struct DN        DN;
           97 typedef struct DNSmsg        DNSmsg;
           98 typedef struct RR        RR;
           99 typedef struct SOA        SOA;
          100 typedef struct Area        Area;
          101 typedef struct Request        Request;
          102 typedef struct Key        Key;
          103 typedef struct Cert        Cert;
          104 typedef struct Sig        Sig;
          105 typedef struct Null        Null;
          106 typedef struct Server        Server;
          107 typedef struct Txt        Txt;
          108 
          109 /*
          110  *  a structure to track a request and any slave process handling it
          111  */
          112 struct Request
          113 {
          114         ulong        aborttime;        /* time at which we give up */
          115         int        id;
          116 };
          117 
          118 /*
          119  *  a domain name
          120  */
          121 struct DN
          122 {
          123         DN        *next;                /* hash collision list */
          124         ulong        magic;
          125         char        *name;                /* owner */
          126         RR        *rr;                /* resource records off this name */
          127         ulong        referenced;        /* time last referenced */
          128         ulong        lookuptime;        /* last time we tried to get a better value */
          129         ushort        class;                /* RR class */
          130         char        refs;                /* for mark and sweep */
          131         char        nonexistent;        /* true if we get an authoritative nx for this domain */
          132         ulong        ordinal;
          133 };
          134 
          135 /*
          136  *  security info
          137  */
          138 struct Key
          139 {
          140         int        flags;
          141         int        proto;
          142         int        alg;
          143         int        dlen;
          144         uchar        *data;
          145 };
          146 struct Cert
          147 {
          148         int        type;
          149         int        tag;
          150         int        alg;
          151         int        dlen;
          152         uchar        *data;
          153 };
          154 struct Sig
          155 {
          156         int        type;
          157         int        alg;
          158         int        labels;
          159         ulong        ttl;
          160         ulong        exp;
          161         ulong        incep;
          162         int        tag;
          163         DN        *signer;
          164         int        dlen;
          165         uchar        *data;
          166 };
          167 struct Null
          168 {
          169         int        dlen;
          170         uchar        *data;
          171 };
          172 
          173 /*
          174  *  text strings
          175  */
          176 struct Txt
          177 {
          178         Txt        *next;
          179         char        *p;
          180 };
          181 
          182 /*
          183  *  an unpacked resource record
          184  */
          185 struct RR
          186 {
          187         RR        *next;
          188         ulong        magic;
          189         DN        *owner;                /* domain that owns this resource record */
          190         uchar        negative;        /* this is a cached negative response */
          191         ulong        pc;
          192         ulong        ttl;                /* time to live to be passed on */
          193         ulong        expire;                /* time this entry expires locally */
          194         ushort        type;                /* RR type */
          195         ushort        query;                /* query tyis is in response to */
          196         uchar        auth;                /* authoritative */
          197         uchar        db;                /* from database */
          198         uchar        cached;                /* rr in cache */
          199         ulong        marker;                /* used locally when scanning rrlists */
          200 /*        union { */
          201                 DN        *negsoaowner;        /* soa for cached negative response */
          202                 DN        *host;        /* hostname - soa, cname, mb, md, mf, mx, ns */
          203                 DN        *cpu;        /* cpu type - hinfo */
          204                 DN        *mb;        /* mailbox - mg, minfo */
          205                 DN        *ip;        /* ip addrss - a */
          206                 DN        *rp;        /* rp arg - rp */
          207                 int        cruftlen;
          208                 ulong        arg0;
          209 /*        }; */
          210 /*        union { */
          211                 int        negrcode;        /* response code for cached negative response */
          212                 DN        *rmb;        /* responsible maibox - minfo, soa, rp */
          213                 DN        *ptr;        /* pointer to domain name - ptr */
          214                 DN        *os;        /* operating system - hinfo */
          215                 ulong        pref;        /* preference value - mx */
          216                 ulong        local;        /* ns served from local database - ns */
          217                 ulong        arg1;
          218 /*        }; */
          219 /*        union { */
          220                 SOA        *soa;        /* soa timers - soa */
          221                 Key        *key;
          222                 Cert        *cert;
          223                 Sig        *sig;
          224                 Null        *null;
          225                 Txt        *txt;
          226 /*        }; */
          227 };
          228 
          229 /*
          230  *  list of servers
          231  */
          232 struct Server
          233 {
          234         Server        *next;
          235         char        *name;
          236 };
          237 
          238 /*
          239  *  timers for a start of authenticated record
          240  */
          241 struct SOA
          242 {
          243         ulong        serial;                /* zone serial # (sec) - soa */
          244         ulong        refresh;        /* zone refresh interval (sec) - soa */
          245         ulong        retry;                /* zone retry interval (sec) - soa */
          246         ulong        expire;                /* time to expiration (sec) - soa */
          247         ulong        minttl;                /* minimum time to live for any entry (sec) - soa */
          248         Server        *slaves;        /* slave servers */
          249 };
          250 
          251 /*
          252  *  domain messages
          253  */
          254 struct DNSmsg
          255 {
          256         ushort        id;
          257         int        flags;
          258         int        qdcount;        /* questions */
          259         RR         *qd;
          260         int        ancount;        /* answers */
          261         RR        *an;
          262         int        nscount;        /* name servers */
          263         RR        *ns;
          264         int        arcount;        /* hints */
          265         RR        *ar;
          266 };
          267 
          268 /*
          269  *  definition of local area for dblookup
          270  */
          271 struct Area
          272 {
          273         Area                *next;
          274 
          275         int                len;                /* strlen(area->soarr->owner->name) */
          276         RR                *soarr;                /* soa defining this area */
          277         int                neednotify;
          278         int                needrefresh;
          279 };
          280 
          281 enum
          282 {
          283         Recurse,
          284         Dontrecurse,
          285         NOneg,
          286         OKneg
          287 };
          288 
          289 enum
          290 {
          291         STACK = 32*1024
          292 };
          293 
          294 /* dn.c */
          295 extern char        *rrtname[];
          296 extern char        *rname[];
          297 extern void        db2cache(int);
          298 extern void        dninit(void);
          299 extern DN*        dnlookup(char*, int, int);
          300 extern void        dnage(DN*);
          301 extern void        dnageall(int);
          302 extern void        dnagedb(void);
          303 extern void        dnauthdb(void);
          304 extern void        dnget(void);
          305 extern void        dnpurge(void);
          306 extern void        dnput(void);
          307 extern Area*        inmyarea(char*);
          308 extern void        rrattach(RR*, int);
          309 extern RR*        rralloc(int);
          310 extern void        rrfree(RR*);
          311 extern void        rrfreelist(RR*);
          312 extern RR*        rrlookup(DN*, int, int);
          313 extern RR*        rrcat(RR**, RR*);
          314 extern RR**        rrcopy(RR*, RR**);
          315 extern RR*        rrremneg(RR**);
          316 extern RR*        rrremtype(RR**, int);
          317 extern int        rrfmt(Fmt*);
          318 extern int        rravfmt(Fmt*);
          319 extern int        rrsupported(int);
          320 extern int        rrtype(char*);
          321 extern char*        rrname(int, char*, int);
          322 extern int        tsame(int, int);
          323 extern void        dndump(char*);
          324 extern int        getactivity(Request*);
          325 extern void        putactivity(void);
          326 extern void        warning(char*, ...);
          327 extern void        dncheck(void*, int);
          328 extern void        unique(RR*);
          329 extern int        subsume(char*, char*);
          330 extern RR*        randomize(RR*);
          331 extern void*        emalloc(int);
          332 extern char*        estrdup(char*);
          333 extern void        dnptr(uchar*, uchar*, char*, int, int);
          334 extern void        addserver(Server**, char*);
          335 extern Server*        copyserverlist(Server*);
          336 extern void        freeserverlist(Server*);
          337 
          338 /* dnarea.c */
          339 extern void        refresh_areas(Area*);
          340 extern void        freearea(Area**);
          341 extern void        addarea(DN *dp, RR *rp, Ndbtuple *t);
          342 
          343 /* dblookup.c */
          344 extern RR*        dblookup(char*, int, int, int, int);
          345 extern RR*        dbinaddr(DN*, int);
          346 extern int        baddelegation(RR*, RR*, uchar*);
          347 extern RR*        dnsservers(int);
          348 extern RR*        domainlist(int);
          349 extern int        opendatabase(void);
          350 
          351 /* dns.c */
          352 extern char*        walkup(char*);
          353 extern RR*        getdnsservers(int);
          354 extern void        logreply(int, uchar*, DNSmsg*);
          355 extern void        logsend(int, int, uchar*, char*, char*, int);
          356 
          357 /* dnresolve.c */
          358 extern RR*        dnresolve(char*, int, int, Request*, RR**, int, int, int, int*);
          359 extern int        udpport(void);
          360 extern int        mkreq(DN *dp, int type, uchar *buf, int flags, ushort reqno);
          361 
          362 /* dnserver.c */
          363 extern void        dnserver(DNSmsg*, DNSmsg*, Request*);
          364 extern void        dnudpserver(void*);
          365 extern void        dntcpserver(void*);
          366 extern void        tcpproc(void*);
          367 
          368 /* dnnotify.c */
          369 extern void        dnnotify(DNSmsg*, DNSmsg*, Request*);
          370 extern void        notifyproc(void*);
          371 
          372 /* convDNS2M.c */
          373 extern int        convDNS2M(DNSmsg*, uchar*, int);
          374 
          375 /* convM2DNS.c */
          376 extern char*        convM2DNS(uchar*, int, DNSmsg*);
          377 
          378 /* malloc.c */
          379 extern void        mallocsanity(void*);
          380 extern void        lasthist(void*, int, ulong);
          381 
          382 /* runproc.c */
          383 extern Waitmsg*        runproc(char*, char**, int);
          384 extern Waitmsg*        runprocfd(char*, char**, int[3]);
          385 
          386 extern int        debug;
          387 extern int        traceactivity;
          388 extern char        *trace;
          389 extern int        testing;        /* test cache whenever removing a DN */
          390 extern int        cachedb;
          391 extern int        needrefresh;
          392 extern char        *dbfile;
          393 extern char        mntpt[];
          394 extern char        *logfile;
          395 extern int        resolver;
          396 extern int        maxage;                /* age of oldest entry in cache (secs) */
          397 extern char        *zonerefreshprogram;
          398 extern int        sendnotifies;
          399 extern ulong        now;                /* time base */
          400 extern Area        *owned;
          401 extern Area        *delegated;
          402 
          403 extern char        *udpaddr;
          404 extern char        *tcpaddr;
          405 
          406 #ifdef VARARGCK
          407 #pragma        varargck        type        "R"        RR*
          408 #pragma        varargck        type        "Q"        RR*
          409 #endif