1225305Sdougb/*
2234010Sdougb * Copyright (C) 2011, 2012  Internet Systems Consortium, Inc. ("ISC")
3225305Sdougb *
4225305Sdougb * Permission to use, copy, modify, and/or distribute this software for any
5225305Sdougb * purpose with or without fee is hereby granted, provided that the above
6225305Sdougb * copyright notice and this permission notice appear in all copies.
7225305Sdougb *
8225305Sdougb * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9225305Sdougb * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10225305Sdougb * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
11225305Sdougb * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12225305Sdougb * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
13225305Sdougb * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14225305Sdougb * PERFORMANCE OF THIS SOFTWARE.
15225305Sdougb */
16225305Sdougb
17234010Sdougb/* $Id$ */
18225305Sdougb
19225305Sdougb/*! \file dns/dlz_open.h */
20225305Sdougb
21225305Sdougb#ifndef DLZ_DLOPEN_H
22225305Sdougb#define DLZ_DLOPEN_H
23225305Sdougb
24225305Sdougb#include <dns/sdlz.h>
25225305Sdougb
26225305SdougbISC_LANG_BEGINDECLS
27225305Sdougb
28225305Sdougb/*
29225305Sdougb * This header provides a minimal set of defines and typedefs needed
30225305Sdougb * for the entry points of an external DLZ module for bind9.
31225305Sdougb */
32225305Sdougb
33254897Serwin#define DLZ_DLOPEN_VERSION 2
34225305Sdougb
35225305Sdougb/*
36225305Sdougb * dlz_dlopen_version() is required for all DLZ external drivers. It
37225305Sdougb * should return DLZ_DLOPEN_VERSION
38225305Sdougb */
39225305Sdougbtypedef int dlz_dlopen_version_t (unsigned int *flags);
40225305Sdougb
41225305Sdougb/*
42225305Sdougb * dlz_dlopen_create() is required for all DLZ external drivers.
43225305Sdougb */
44225305Sdougbtypedef isc_result_t dlz_dlopen_create_t (const char *dlzname,
45225305Sdougb					  unsigned int argc,
46225305Sdougb					  char *argv[],
47225305Sdougb					  void **dbdata,
48225305Sdougb					  ...);
49225305Sdougb
50225305Sdougb/*
51225305Sdougb * dlz_dlopen_destroy() is optional, and will be called when the
52225305Sdougb * driver is unloaded if supplied
53225305Sdougb */
54225305Sdougbtypedef void dlz_dlopen_destroy_t (void *dbdata);
55225305Sdougb
56225305Sdougb/*
57225305Sdougb * dlz_dlopen_findzonedb() is required for all DLZ external drivers
58225305Sdougb */
59225305Sdougbtypedef isc_result_t dlz_dlopen_findzonedb_t (void *dbdata,
60225305Sdougb					      const char *name);
61225305Sdougb
62225305Sdougb/*
63225305Sdougb * dlz_dlopen_lookup() is required for all DLZ external drivers
64225305Sdougb */
65225305Sdougbtypedef isc_result_t dlz_dlopen_lookup_t (const char *zone,
66225305Sdougb					  const char *name,
67225305Sdougb					  void *dbdata,
68254897Serwin					  dns_sdlzlookup_t *lookup,
69254897Serwin					  dns_clientinfomethods_t *methods,
70254897Serwin					  dns_clientinfo_t *clientinfo);
71225305Sdougb
72225305Sdougb/*
73225305Sdougb * dlz_dlopen_authority is optional() if dlz_dlopen_lookup()
74225305Sdougb * supplies authority information for the dns record
75225305Sdougb */
76225305Sdougbtypedef isc_result_t dlz_dlopen_authority_t (const char *zone,
77225305Sdougb					     void *dbdata,
78225305Sdougb					     dns_sdlzlookup_t *lookup);
79225305Sdougb
80225305Sdougb/*
81225305Sdougb * dlz_dlopen_allowzonexfr() is optional, and should be supplied if
82225305Sdougb * you want to support zone transfers
83225305Sdougb */
84225305Sdougbtypedef isc_result_t dlz_dlopen_allowzonexfr_t (void *dbdata,
85225305Sdougb						const char *name,
86225305Sdougb						const char *client);
87225305Sdougb
88225305Sdougb/*
89225305Sdougb * dlz_dlopen_allnodes() is optional, but must be supplied if supply a
90225305Sdougb * dlz_dlopen_allowzonexfr() function
91225305Sdougb */
92225305Sdougbtypedef isc_result_t dlz_dlopen_allnodes_t (const char *zone,
93225305Sdougb					    void *dbdata,
94225305Sdougb					    dns_sdlzallnodes_t *allnodes);
95225305Sdougb
96225305Sdougb/*
97225305Sdougb * dlz_dlopen_newversion() is optional. It should be supplied if you
98225305Sdougb * want to support dynamic updates.
99225305Sdougb */
100225305Sdougbtypedef isc_result_t dlz_dlopen_newversion_t (const char *zone,
101225305Sdougb					      void *dbdata,
102225305Sdougb					      void **versionp);
103225305Sdougb
104225305Sdougb/*
105225305Sdougb * dlz_closeversion() is optional, but must be supplied if you supply
106225305Sdougb * a dlz_newversion() function
107225305Sdougb */
108225305Sdougbtypedef void dlz_dlopen_closeversion_t (const char *zone,
109225305Sdougb					isc_boolean_t commit,
110225305Sdougb					void *dbdata,
111225305Sdougb					void **versionp);
112225305Sdougb
113225305Sdougb/*
114225305Sdougb * dlz_dlopen_configure() is optional, but must be supplied if you
115225305Sdougb * want to support dynamic updates
116225305Sdougb */
117225305Sdougbtypedef isc_result_t dlz_dlopen_configure_t (dns_view_t *view,
118225305Sdougb					     void *dbdata);
119225305Sdougb
120225305Sdougb/*
121254897Serwin * dlz_dlopen_setclientcallback() is optional, but must be supplied if you
122254897Serwin * want to retrieve information about the client (e.g., source address)
123254897Serwin * before sending a replay.
124254897Serwin */
125254897Serwintypedef isc_result_t dlz_dlopen_setclientcallback_t (dns_view_t *view,
126254897Serwin						     void *dbdata);
127254897Serwin
128254897Serwin
129254897Serwin/*
130225305Sdougb * dlz_dlopen_ssumatch() is optional, but must be supplied if you want
131225305Sdougb * to support dynamic updates
132225305Sdougb */
133225305Sdougbtypedef isc_boolean_t dlz_dlopen_ssumatch_t (const char *signer,
134225305Sdougb					     const char *name,
135225305Sdougb					     const char *tcpaddr,
136225305Sdougb					     const char *type,
137225305Sdougb					     const char *key,
138225305Sdougb					     isc_uint32_t keydatalen,
139225305Sdougb					     unsigned char *keydata,
140225305Sdougb					     void *dbdata);
141225305Sdougb
142225305Sdougb/*
143225305Sdougb * dlz_dlopen_addrdataset() is optional, but must be supplied if you
144225305Sdougb * want to support dynamic updates
145225305Sdougb */
146225305Sdougbtypedef isc_result_t dlz_dlopen_addrdataset_t (const char *name,
147225305Sdougb					       const char *rdatastr,
148225305Sdougb					       void *dbdata,
149225305Sdougb					       void *version);
150225305Sdougb
151225305Sdougb/*
152225305Sdougb * dlz_dlopen_subrdataset() is optional, but must be supplied if you
153225305Sdougb * want to support dynamic updates
154225305Sdougb */
155225305Sdougbtypedef isc_result_t dlz_dlopen_subrdataset_t (const char *name,
156225305Sdougb					       const char *rdatastr,
157225305Sdougb					       void *dbdata,
158225305Sdougb					       void *version);
159225305Sdougb
160225305Sdougb/*
161225305Sdougb * dlz_dlopen_delrdataset() is optional, but must be supplied if you
162225305Sdougb * want to support dynamic updates
163225305Sdougb */
164225305Sdougbtypedef isc_result_t dlz_dlopen_delrdataset_t (const char *name,
165225305Sdougb					       const char *type,
166225305Sdougb					       void *dbdata,
167225305Sdougb					       void *version);
168225305Sdougb
169225305SdougbISC_LANG_ENDDECLS
170225305Sdougb
171225305Sdougb#endif
172