zone revision f7cf0e6785e4a7e5574328a7000a9e8926a9bc9c
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews Zones
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews $Id: zone,v 1.2 1999/02/26 21:32:10 marka Exp $
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark AndrewsOverview
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews Zones are the unit of delegation in the DNS and may go from holding
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews RR's only at the zone top to holding the complete hierachy (private
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews roots zones). Zones are a container for the RRsets that make up the
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews zone.
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews Zone have certain properties associated with them.
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * name
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * class
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * master / slave / stub / hint / cache / forward
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * serial number
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * signed / unsigned
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * update periods (refresh / retry) (slave / stub)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * last update time (slave / stub)
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * access restrictions
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * transfer restrictions (master / slave)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * update restictions (master / slave)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * expire period (slave / stub)
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * children => bottom
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * glue
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * rrsets / data
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * transfer "in" in progress
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * transfers "out" in progress
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * "current" check in progress
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * our masters
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * primary master name (required to auto generate our masters)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * master file name
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * database name
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * transaction logs
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * notification lists
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * NS's
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * static additional sites (stealth servers)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * dynamically leared sites (soa queries)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews Zones also have versions associated with them, each of which, with
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews the exception of the current zone, has an expiry date.
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews "How long are we going to keep them operationally?"
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews While there are expriry dates based on last update /
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews change time + expire. In practice holding the deltas
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews for a few refresh periods should be enough. If the network
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews and servers are up one is enough.
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews "How are we going to generate them from a master file?"
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews UPDATE should not be the only answer to this question.
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews We need a tool that takes the current zone & new zone.
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews Verifies the new zone, generates a delta and feeds this
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews at named. It could well be part of ndc but does not have
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews to be.
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews Zones need to have certain operations performed on them. The need to
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews be:
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * loaded
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * unloaded
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * dumped
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * updated (UPDATE / IXFR)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * copied out in full (AXFR) or as partial deltas (IXFR)
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * read from
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * validated
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews * generate a delta between two given versions.
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * signed / resigned
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * maintaince
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews validate current soa
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews remove old deltas
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews purge stale rrsets (cache)
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews * notification
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews responding to
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews generating
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark AndrewsTypes:
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews typedef enum {
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_none = 0,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_master,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_slave,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_stub,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_hint,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_cache,
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_forward
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews } dns_zonetypes_t;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews struct dns_zone {
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews unsigned int magic; /* ZONE */
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_name_t name;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_rdataclass_t class;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zonetypes_t type;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_rbt_t top;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews isc_uint32_t version;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews isc_uint32_t serial;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews isc_uint32_t refresh;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews isc_uint32_t retry;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews isc_uint32_t serial;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews char *masterfile;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_acl_t *access;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_acl_t *transfer;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews struct {
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_acl_t *acl;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_scl_t *scl; /* tsig based acl */
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews } update;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews char *database;
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews ...
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews };
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark AndrewsOperations:
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark AndrewsLoading:
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark AndrewsFunctions:
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews void
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_init(dns_zone_t *, dns_rdataclass_t class, isc_mem_t *mxtc);
ed12ab17de6d192fd46914be8dc55fb573470664Mark Andrews
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews void
f7cf0e6785e4a7e5574328a7000a9e8926a9bc9cMark Andrews dns_zone_invalidate(dns_zone_t *);