summaryrefslogtreecommitdiffstats
path: root/lib/dns/include/dns/dlz_dlopen.h
blob: a0059ffbdf8253bbb39ae1dc3f26d0bd0d85edf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
 *
 * SPDX-License-Identifier: MPL-2.0
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
 *
 * See the COPYRIGHT file distributed with this work for additional
 * information regarding copyright ownership.
 */

/*! \file dns/dlz_dlopen.h */

#pragma once

#include <inttypes.h>
#include <stdbool.h>

#include <dns/sdlz.h>

ISC_LANG_BEGINDECLS

/*
 * This header provides a minimal set of defines and typedefs needed
 * for the entry points of an external DLZ module for bind9.
 */

#define DLZ_DLOPEN_VERSION 3
#define DLZ_DLOPEN_AGE	   0

/*
 * dlz_dlopen_version() is required for all DLZ external drivers. It
 * should return DLZ_DLOPEN_VERSION
 */
typedef int
dlz_dlopen_version_t(unsigned int *flags);

/*
 * dlz_dlopen_create() is required for all DLZ external drivers.
 */
typedef isc_result_t
dlz_dlopen_create_t(const char *dlzname, unsigned int argc, char *argv[],
		    void **dbdata, ...);

/*
 * dlz_dlopen_destroy() is optional, and will be called when the
 * driver is unloaded if supplied
 */
typedef void
dlz_dlopen_destroy_t(void *dbdata);

/*
 * dlz_dlopen_findzonedb() is required for all DLZ external drivers
 */
typedef isc_result_t
dlz_dlopen_findzonedb_t(void *dbdata, const char *name,
			dns_clientinfomethods_t *methods,
			dns_clientinfo_t	*clientinfo);

/*
 * dlz_dlopen_lookup() is required for all DLZ external drivers
 */
typedef isc_result_t
dlz_dlopen_lookup_t(const char *zone, const char *name, void *dbdata,
		    dns_sdlzlookup_t *lookup, dns_clientinfomethods_t *methods,
		    dns_clientinfo_t *clientinfo);

/*
 * dlz_dlopen_authority is optional() if dlz_dlopen_lookup()
 * supplies authority information for the dns record
 */
typedef isc_result_t
dlz_dlopen_authority_t(const char *zone, void *dbdata,
		       dns_sdlzlookup_t *lookup);

/*
 * dlz_dlopen_allowzonexfr() is optional, and should be supplied if
 * you want to support zone transfers
 */
typedef isc_result_t
dlz_dlopen_allowzonexfr_t(void *dbdata, const char *name, const char *client);

/*
 * dlz_dlopen_allnodes() is optional, but must be supplied if supply a
 * dlz_dlopen_allowzonexfr() function
 */
typedef isc_result_t
dlz_dlopen_allnodes_t(const char *zone, void *dbdata,
		      dns_sdlzallnodes_t *allnodes);

/*
 * dlz_dlopen_newversion() is optional. It should be supplied if you
 * want to support dynamic updates.
 */
typedef isc_result_t
dlz_dlopen_newversion_t(const char *zone, void *dbdata, void **versionp);

/*
 * dlz_closeversion() is optional, but must be supplied if you supply
 * a dlz_newversion() function
 */
typedef void
dlz_dlopen_closeversion_t(const char *zone, bool commit, void *dbdata,
			  void **versionp);

/*
 * dlz_dlopen_configure() is optional, but must be supplied if you
 * want to support dynamic updates
 */
typedef isc_result_t
dlz_dlopen_configure_t(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata);

/*
 * dlz_dlopen_setclientcallback() is optional, but must be supplied if you
 * want to retrieve information about the client (e.g., source address)
 * before sending a replay.
 */
typedef isc_result_t
dlz_dlopen_setclientcallback_t(dns_view_t *view, void *dbdata);

/*
 * dlz_dlopen_ssumatch() is optional, but must be supplied if you want
 * to support dynamic updates
 */
typedef bool
dlz_dlopen_ssumatch_t(const char *signer, const char *name, const char *tcpaddr,
		      const char *type, const char *key, uint32_t keydatalen,
		      unsigned char *keydata, void *dbdata);

/*
 * dlz_dlopen_addrdataset() is optional, but must be supplied if you
 * want to support dynamic updates
 */
typedef isc_result_t
dlz_dlopen_addrdataset_t(const char *name, const char *rdatastr, void *dbdata,
			 void *version);

/*
 * dlz_dlopen_subrdataset() is optional, but must be supplied if you
 * want to support dynamic updates
 */
typedef isc_result_t
dlz_dlopen_subrdataset_t(const char *name, const char *rdatastr, void *dbdata,
			 void *version);

/*
 * dlz_dlopen_delrdataset() is optional, but must be supplied if you
 * want to support dynamic updates
 */
typedef isc_result_t
dlz_dlopen_delrdataset_t(const char *name, const char *type, void *dbdata,
			 void *version);

ISC_LANG_ENDDECLS