Blame agent/mibgroup/Rmon/row_api.h

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