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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
|
// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
//
// 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 http://mozilla.org/MPL/2.0/.
#ifndef CONFIG_BACKEND_POOL_DHCP4_H
#define CONFIG_BACKEND_POOL_DHCP4_H
#include <config_backend/base_config_backend_pool.h>
#include <database/backend_selector.h>
#include <database/server_selector.h>
#include <dhcp/option.h>
#include <dhcp/option_definition.h>
#include <dhcpsrv/config_backend_dhcp4.h>
#include <dhcpsrv/shared_network.h>
#include <dhcpsrv/subnet.h>
#include <util/optional_value.h>
#include <boost/date_time/posix_time/ptime.hpp>
#include <string>
namespace isc {
namespace dhcp {
/// @brief Implementation of the Configuration Backend Pool for DHCPv4.
class ConfigBackendPoolDHCPv4 : cb::BaseConfigBackendPool<ConfigBackendDHCPv4> {
public:
/// @brief Retrieves a single subnet by subnet_prefix.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_prefix Prefix of the subnet to be retrieved.
/// @return Pointer to the retrieved subnet or NULL if not found.
virtual Subnet4Ptr
getSubnet4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& subnet_prefix) const;
/// @brief Retrieves a single subnet by subnet identifier.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_id Identifier of a subnet to be retrieved.
/// @return Pointer to the retrieved subnet or NULL if not found.
virtual Subnet4Ptr
getSubnet4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const SubnetID& subnet_id) const;
/// @brief Retrieves all subnets.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @return Collection of subnets or empty collection if no subnet found.
virtual Subnet4Collection
getAllSubnets4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector) const;
/// @brief Retrieves subnets modified after specified time.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param modification_time Lower bound subnet modification time.
/// @return Collection of subnets or empty collection if no subnet found.
virtual Subnet4Collection
getModifiedSubnets4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const boost::posix_time::ptime& modification_time) const;
/// @brief Retrieves shared network by name.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the shared network to be retrieved.
/// @return Pointer to the shared network or NULL if not found.
virtual SharedNetwork4Ptr
getSharedNetwork4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name) const;
/// @brief Retrieves all shared networks.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @return Collection of shared network or empty collection if
/// no shared network found.
virtual SharedNetwork4Collection
getAllSharedNetworks4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector) const;
/// @brief Retrieves shared networks modified after specified time.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param modification_time Lower bound shared network modification time.
/// @return Collection of shared network or empty collection if
/// no shared network found.
virtual SharedNetwork4Collection
getModifiedSharedNetworks4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const boost::posix_time::ptime& modification_time) const;
/// @brief Retrieves single option definition by code and space.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param code Code of the option to be retrieved.
/// @param space Option space of the option to be retrieved.
/// @return Pointer to the option definition or NULL if not found.
virtual OptionDefinitionPtr
getOptionDef4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const uint16_t code,
const std::string& space) const;
/// @brief Retrieves all option definitions.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @return Collection of option definitions or empty collection if
/// no option definition found.
virtual OptionDefContainer
getAllOptionDefs4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector) const;
/// @brief Retrieves option definitions modified after specified time.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param modification_time Lower bound option definition modification
/// time.
/// @return Collection of option definitions or empty collection if
/// no option definition found.
virtual OptionDefContainer
getModifiedOptionDefs4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const boost::posix_time::ptime& modification_time) const;
/// @brief Retrieves global string parameter value.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the global parameter to be retrieved.
/// @return Value of the global string parameter.
virtual util::OptionalValue<std::string>
getGlobalStringParameter4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name) const;
/// @brief Retrieves global number parameter.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the parameter to be retrieved.
virtual util::OptionalValue<int64_t>
getGlobalNumberParameter4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name) const;
/// @brief Retrieves all global parameters as strings.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
virtual std::map<std::string, std::string>
getAllGlobalParameters4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector) const;
/// @brief Creates or updates a subnet.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet Subnet to be added or updated.
virtual void
createUpdateSubnet4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const Subnet4Ptr& subnet);
/// @brief Creates or updates a shared network.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param shared_network Shared network to be added or updated.
virtual void
createUpdateSharedNetwork4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const SharedNetwork4Ptr& shared_network);
/// @brief Creates or updates an option definition.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param option_def Option definition to be added or updated.
virtual void
createUpdateOptionDef4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const OptionDefinitionPtr& option_def);
/// @brief Creates or updates global option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param option Option to be added or updated.
virtual void
createUpdateOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const OptionPtr& option);
/// @brief Creates or updates subnet level option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_id Identifier of a subnet to which option belongs.
/// @param option Option to be added or updated.
virtual void
createUpdateOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const SubnetID& subnet_id,
const OptionPtr& option);
/// @brief Creates or updates pool level option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param pool_start_address Lower bound address of the pool to which
/// the option belongs.
/// @param pool_end_address Upper bound address of the pool to which the
/// option belongs.
/// @param option Option to be added or updated.
virtual void
createUpdateOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const asiolink::IOAddress& pool_start_address,
const asiolink::IOAddress& pool_end_address,
const OptionPtr& option);
/// @brief Creates or updates global string parameter.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the global parameter.
/// @param value Value of the global parameter.
virtual void
createUpdateGlobalParameter4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name,
const std::string& value);
/// @brief Creates or updates global number parameter.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the global parameter.
/// @param value Value of the global parameter.
virtual void
createUpdateGlobalParameter4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name,
const int64_t value);
/// @brief Deletes subnet by prefix.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_prefix Prefix of the subnet to be deleted.
virtual void
deleteSubnet4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& subnet_prefix);
/// @brief Deletes subnet by identifier.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_id Identifier of the subnet to be deleted.
virtual void
deleteSubnet4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const SubnetID& subnet_id);
/// @brief Deletes all subnets.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
virtual void
deleteAllSubnets4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector);
/// @brief Deletes shared network by name.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the shared network to be deleted.
virtual void
deleteSharedNetwork4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name);
/// @brief Deletes all shared networks.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
virtual void
deleteAllSharedNetworks4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector);
/// @brief Deletes option definition.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param code Code of the option to be deleted.
/// @param space Option space of the option to be deleted.
virtual void
deleteOptionDef4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const uint16_t code,
const std::string& space);
/// @brief Deletes all option definitions.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
virtual void
deleteAllOptionDefs4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector);
/// @brief Deletes global option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param code Code of the option to be deleted.
/// @param space Option space of the option to be deleted.
virtual void
deleteOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const uint16_t code,
const std::string& space);
/// @brief Deletes subnet level option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param subnet_id Identifier of the subnet to which deleted option
/// belongs.
/// @param code Code of the deleted option.
/// @param space Option space of the deleted option.
virtual void
deleteOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const SubnetID& subnet_id,
const uint16_t code, const std::string& space);
/// @brief Deletes pool level option.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param pool_start_address Lower bound address of the pool to which
/// deleted option belongs.
/// @param pool_end_address Upper bound address of the pool to which the
/// deleted option belongs.
/// @param code Code of the deleted option.
/// @param space Option space of the deleted option.
virtual void
deleteOption4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const asiolink::IOAddress& pool_start_address,
const asiolink::IOAddress& pool_end_address,
const uint16_t code,
const std::string& space);
/// @brief Deletes global parameter.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
/// @param name Name of the global parameter to be deleted.
virtual void
deleteGlobalParameter4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector,
const std::string& name);
/// @brief Deletes all global parameters.
///
/// @param backend_selector Backend selector.
/// @param server_selector Server selector.
virtual void
deleteAllGlobalParameters4(const db::BackendSelector& backend_selector,
const db::ServerSelector& server_selector);
};
} // end of namespace isc::dhcp
} // end of namespace isc
#endif // CONFIG_BACKEND_POOL_DHCP4_H
|