mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-30 13:57:50 +00:00
Add hooks for subclasses.
This commit is contained in:
parent
fb5f879356
commit
5aa40fc5a0
160
server/omapi.c
160
server/omapi.c
@ -50,7 +50,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
"$Id: omapi.c,v 1.43 2001/02/26 22:21:15 mellon Exp $ Copyright (c) 1999-2000 The Internet Software Consortium. All rights reserved.\n";
|
||||
"$Id: omapi.c,v 1.44 2001/04/05 22:54:57 mellon Exp $ Copyright (c) 1999-2000 The Internet Software Consortium. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#include "dhcpd.h"
|
||||
@ -59,6 +59,7 @@ static char copyright[] =
|
||||
omapi_object_type_t *dhcp_type_lease;
|
||||
omapi_object_type_t *dhcp_type_pool;
|
||||
omapi_object_type_t *dhcp_type_class;
|
||||
omapi_object_type_t *dhcp_type_subclass;
|
||||
omapi_object_type_t *dhcp_type_host;
|
||||
#if defined (FAILOVER_PROTOCOL)
|
||||
omapi_object_type_t *dhcp_type_failover_state;
|
||||
@ -107,6 +108,21 @@ void dhcp_db_objects_setup ()
|
||||
log_fatal ("Can't register class object type: %s",
|
||||
isc_result_totext (status));
|
||||
|
||||
status = omapi_object_type_register (&dhcp_type_subclass,
|
||||
"subclass",
|
||||
dhcp_subclass_set_value,
|
||||
dhcp_subclass_get_value,
|
||||
dhcp_subclass_destroy,
|
||||
dhcp_subclass_signal_handler,
|
||||
dhcp_subclass_stuff_values,
|
||||
dhcp_subclass_lookup,
|
||||
dhcp_subclass_create,
|
||||
dhcp_subclass_remove, 0, 0, 0,
|
||||
sizeof (struct class), 0);
|
||||
if (status != ISC_R_SUCCESS)
|
||||
log_fatal ("Can't register subclass object type: %s",
|
||||
isc_result_totext (status));
|
||||
|
||||
status = omapi_object_type_register (&dhcp_type_pool,
|
||||
"pool",
|
||||
dhcp_pool_set_value,
|
||||
@ -1647,4 +1663,146 @@ isc_result_t dhcp_class_remove (omapi_object_t *lp,
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_set_value (omapi_object_t *h,
|
||||
omapi_object_t *id,
|
||||
omapi_data_string_t *name,
|
||||
omapi_typed_data_t *value)
|
||||
{
|
||||
struct subclass *subclass;
|
||||
isc_result_t status;
|
||||
int foo;
|
||||
|
||||
if (h -> type != dhcp_type_subclass)
|
||||
return ISC_R_INVALIDARG;
|
||||
subclass = (struct subclass *)h;
|
||||
|
||||
/* No values to set yet. */
|
||||
|
||||
/* Try to find some inner object that can take the value. */
|
||||
if (h -> inner && h -> inner -> type -> set_value) {
|
||||
status = ((*(h -> inner -> type -> set_value))
|
||||
(h -> inner, id, name, value));
|
||||
if (status == ISC_R_SUCCESS || status == ISC_R_UNCHANGED)
|
||||
return status;
|
||||
}
|
||||
|
||||
return ISC_R_NOTFOUND;
|
||||
}
|
||||
|
||||
|
||||
isc_result_t dhcp_subclass_get_value (omapi_object_t *h, omapi_object_t *id,
|
||||
omapi_data_string_t *name,
|
||||
omapi_value_t **value)
|
||||
{
|
||||
struct subclass *subclass;
|
||||
isc_result_t status;
|
||||
|
||||
if (h -> type != dhcp_type_subclass)
|
||||
return ISC_R_INVALIDARG;
|
||||
subclass = (struct subclass *)h;
|
||||
|
||||
/* No values to get yet. */
|
||||
|
||||
/* Try to find some inner object that can provide the value. */
|
||||
if (h -> inner && h -> inner -> type -> get_value) {
|
||||
status = ((*(h -> inner -> type -> get_value))
|
||||
(h -> inner, id, name, value));
|
||||
if (status == ISC_R_SUCCESS)
|
||||
return status;
|
||||
}
|
||||
return ISC_R_NOTFOUND;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_destroy (omapi_object_t *h,
|
||||
const char *file, int line)
|
||||
{
|
||||
struct subclass *subclass;
|
||||
isc_result_t status;
|
||||
|
||||
if (h -> type != dhcp_type_subclass)
|
||||
return ISC_R_INVALIDARG;
|
||||
subclass = (struct subclass *)h;
|
||||
|
||||
/* Can't destroy subclasss yet. */
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_signal_handler (omapi_object_t *h,
|
||||
const char *name, va_list ap)
|
||||
{
|
||||
struct subclass *subclass;
|
||||
isc_result_t status;
|
||||
int updatep = 0;
|
||||
|
||||
if (h -> type != dhcp_type_subclass)
|
||||
return ISC_R_INVALIDARG;
|
||||
subclass = (struct subclass *)h;
|
||||
|
||||
/* Can't write subclasss yet. */
|
||||
|
||||
/* Try to find some inner object that can take the value. */
|
||||
if (h -> inner && h -> inner -> type -> get_value) {
|
||||
status = ((*(h -> inner -> type -> signal_handler))
|
||||
(h -> inner, name, ap));
|
||||
if (status == ISC_R_SUCCESS)
|
||||
return status;
|
||||
}
|
||||
if (updatep)
|
||||
return ISC_R_SUCCESS;
|
||||
return ISC_R_NOTFOUND;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_stuff_values (omapi_object_t *c,
|
||||
omapi_object_t *id,
|
||||
omapi_object_t *h)
|
||||
{
|
||||
struct subclass *subclass;
|
||||
isc_result_t status;
|
||||
|
||||
if (h -> type != dhcp_type_subclass)
|
||||
return ISC_R_INVALIDARG;
|
||||
subclass = (struct subclass *)h;
|
||||
|
||||
/* Can't stuff subclass values yet. */
|
||||
|
||||
/* Write out the inner object, if any. */
|
||||
if (h -> inner && h -> inner -> type -> stuff_values) {
|
||||
status = ((*(h -> inner -> type -> stuff_values))
|
||||
(c, id, h -> inner));
|
||||
if (status == ISC_R_SUCCESS)
|
||||
return status;
|
||||
}
|
||||
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_lookup (omapi_object_t **lp,
|
||||
omapi_object_t *id, omapi_object_t *ref)
|
||||
{
|
||||
omapi_value_t *tv = (omapi_value_t *)0;
|
||||
isc_result_t status;
|
||||
struct subclass *subclass;
|
||||
|
||||
/* Can't look up subclasss yet. */
|
||||
|
||||
/* If we get to here without finding a subclass, no valid key was
|
||||
specified. */
|
||||
if (!*lp)
|
||||
return ISC_R_NOKEYS;
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_create (omapi_object_t **lp,
|
||||
omapi_object_t *id)
|
||||
{
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
isc_result_t dhcp_subclass_remove (omapi_object_t *lp,
|
||||
omapi_object_t *id)
|
||||
{
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
/* vim: set tabstop=8: */
|
||||
|
Loading…
x
Reference in New Issue
Block a user