diff options
Diffstat (limited to 'agent/mibgroup/Rmon/row_api.h')
-rw-r--r-- | agent/mibgroup/Rmon/row_api.h | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/agent/mibgroup/Rmon/row_api.h b/agent/mibgroup/Rmon/row_api.h new file mode 100644 index 0000000..9f576be --- /dev/null +++ b/agent/mibgroup/Rmon/row_api.h @@ -0,0 +1,187 @@ +/************************************************************** + * Copyright (C) 2001 Alex Rozin, Optical Access + * + * All Rights Reserved + * + * Permission to use, copy, modify and distribute this software and its + * documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation. + * + * ALEX ROZIN DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * ALEX ROZIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + ******************************************************************/ + +#ifndef _row_api_h_included__ +#define _row_api_h_included__ + +/* + * control tables API section + */ + +typedef enum { + RMON1_ENTRY_VALID = 1, + RMON1_ENTRY_CREATE_REQUEST, + RMON1_ENTRY_UNDER_CREATION, + RMON1_ENTRY_INVALID +} RMON1_ENTRY_STATUS_T; + +#define MAX_OWNERSTRING 128 + +/* + * structure for entry of all 'control' tables + */ +typedef struct tagEntry { + /* + * begin of the header + */ + struct tagEntry *next; + void *table_ptr; /* do casting to (TABLE_DEFINTION_T*) */ + RMON1_ENTRY_STATUS_T status; + RMON1_ENTRY_STATUS_T new_status; + u_long ctrl_index; + u_long timer_id; + char *owner; + char *new_owner; + u_char only_just_created; + + /* + * end of the header + */ + + void *body; + void *tmp; +} RMON_ENTRY_T; + +typedef int (ENTRY_CALLBACK_T) (RMON_ENTRY_T *); + +typedef struct { + const char *name; + RMON_ENTRY_T *first; + u_long max_number_of_entries; /* '<0' means without limit */ + u_long current_number_of_entries; + ENTRY_CALLBACK_T *ClbkCreate; + ENTRY_CALLBACK_T *ClbkClone; + ENTRY_CALLBACK_T *ClbkValidate; + ENTRY_CALLBACK_T *ClbkActivate; + ENTRY_CALLBACK_T *ClbkDeactivate; + ENTRY_CALLBACK_T *ClbkDelete; + ENTRY_CALLBACK_T *ClbkCopy; +} TABLE_DEFINTION_T; + +/* + * Api prototypes + */ +void ROWAPI_init_table(TABLE_DEFINTION_T * table_ptr, + const char *name, + u_long max_number_of_entries, + ENTRY_CALLBACK_T * ClbkCreate, + ENTRY_CALLBACK_T * ClbkClone, + ENTRY_CALLBACK_T * ClbkDelete, + ENTRY_CALLBACK_T * ClbkValidate, + ENTRY_CALLBACK_T * ClbkActivate, + ENTRY_CALLBACK_T * ClbkDeactivate, + ENTRY_CALLBACK_T * ClbkCopy); + +int ROWAPI_new(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index); + +RMON_ENTRY_T *ROWAPI_get_clone(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index, size_t body_size); + +void ROWAPI_delete_clone(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index); + +RMON_ENTRY_T *ROWAPI_first(TABLE_DEFINTION_T * table_ptr); + +RMON_ENTRY_T *ROWAPI_next(TABLE_DEFINTION_T * table_ptr, + u_long prev_index); + +RMON_ENTRY_T *ROWAPI_find(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index); + +int ROWAPI_action_check(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index); + +int ROWAPI_commit(TABLE_DEFINTION_T * table_ptr, + u_long ctrl_index); + +RMON_ENTRY_T *ROWAPI_header_ControlEntry(struct variable *vp, oid * name, + size_t * length, int exact, + size_t * var_len, + TABLE_DEFINTION_T * table_ptr, + void *entry_ptr, + size_t entry_size); + +int ROWAPI_do_another_action(oid * name, + int tbl_first_index_begin, + int action, int *prev_action, + TABLE_DEFINTION_T * table_ptr, + size_t entry_size); + +/* + * data tables API section + */ + +typedef int (SCROLLER_ENTRY_DESCRUCTOR_T) (void *); + +typedef struct nexted_void_t { + struct nexted_void_t *next; + u_long data_index; +} NEXTED_PTR_T; + +typedef struct data_scroller { + u_long max_number_of_entries; + u_long data_requested; + u_long data_granted; + u_long data_created; /* number of allocated data entries */ + u_long data_stored; /* number of data, currently stored */ + u_long data_total_number; /* number of data entries, stored after validation */ + + /* + * these 3 pointers make casting to private (DATA_ENTRY_T*) + */ + void *first_data_ptr; + NEXTED_PTR_T *last_data_ptr; + void *current_data_ptr; + + size_t data_size; + int (*data_destructor) (struct data_scroller *, void *); +} SCROLLER_T; + +int ROWDATAAPI_init(SCROLLER_T * scrlr, + u_long max_number_of_entries, + u_long data_requested, + size_t data_size, + int (*data_destructor) (struct + data_scroller *, + void *)); + +void + ROWDATAAPI_set_size(SCROLLER_T * scrlr, + u_long data_requested, + u_char do_allocation); + +void ROWDATAAPI_descructor(SCROLLER_T * scrlr); + +void *ROWDATAAPI_locate_new_data(SCROLLER_T * scrlr); + +u_long ROWDATAAPI_get_total_number(SCROLLER_T * scrlr); + +RMON_ENTRY_T *ROWDATAAPI_header_DataEntry(struct variable *vp, + oid * name, size_t * length, + int exact, size_t * var_len, + TABLE_DEFINTION_T * table_ptr, + SCROLLER_T * + (*extract_scroller) (void + *body), + size_t data_size, + void *entry_ptr); + +#endif /* _row_api_h_included__ */ |