RE: How to delete/add line from raw table?

"Naama Bar Menachem" <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
Hi

Net-snmp version: 5.5
Mibfile & c file: attached
Mib2c command:
env MIBS="ALL"
MIBDIRS="/home/naamab/snmp/snmp_no_mips_no_perl____mv/share/snmp/mibs/"
mib2c -c mib2c.iterate.conf nsCommonConfigDataForwardPolicyRoute

Thank you,
Naama


-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of
Dave Shield
Sent: Thursday, July 26, 2012 10:59 AM
To: Naama Bar Menachem
Cc: [email protected]
Subject: Re: How to delete/add line from raw table?

On 26 July 2012 07:07, Naama Bar Menachem
<[email protected]> wrote:
> My tables are actually kept in kernel, and not in agent itself

Do you have an API call that will remove an entry from this table?


> After adding RowStatus column, mib2c created a c file with variables 
> with the names "xxxxxNotifyRowStatus" and "old_xxxxxNotifyRowStatus" 
> but without any type.

Sounds odd....
Can you please post (as attachments!):
    -  The MIB file that you are working from
    -  The .c (and .h) files produced by mib2c
          (*without* any of your subsequent changes)

Also - which version of the Net-SNMP software are you using, and what
was the *exact* mib2c command that you gave?

Dave

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/

_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
NOVELSAT-COMMON.mib (application/octet-stream, 70.5 KB) - not displayed
nsCommonConfigDataForwardPolicyRoute.c (application/octet-stream, 18.8 KB)
/*
 * Note: this file originally auto-generated by mib2c using
 *  : mib2c.iterate.conf 17695 2009-07-21 12:22:18Z dts12 $
 */

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "nsCommonConfigDataForwardPolicyRoute.h"

/** Initializes the nsCommonConfigDataForwardPolicyRoute module */
void
init_nsCommonConfigDataForwardPolicyRoute(void)
{
    /*
     * here we initialize all the tables we're planning on supporting 
     */
    initialize_table_nsCommonConfigDataForwardPolicyRouteTable();
}

# Determine the first/last column names

/** Initialize the nsCommonConfigDataForwardPolicyRouteTable table by defining its contents and how it's structured */
void
initialize_table_nsCommonConfigDataForwardPolicyRouteTable(void)
{
    const oid       nsCommonConfigDataForwardPolicyRouteTable_oid[] =
        { 1, 3, 6, 1, 4, 1, 37576, 2, 1, 7, 4, 1, 1 };
    const size_t    nsCommonConfigDataForwardPolicyRouteTable_oid_len =
        OID_LENGTH(nsCommonConfigDataForwardPolicyRouteTable_oid);
    netsnmp_handler_registration *reg;
    netsnmp_iterator_info *iinfo;
    netsnmp_table_registration_info *table_info;

    DEBUGMSGTL(("nsCommonConfigDataForwardPolicyRoute:init",
                "initializing table nsCommonConfigDataForwardPolicyRouteTable\n"));

    reg =
        netsnmp_create_handler_registration
        ("nsCommonConfigDataForwardPolicyRouteTable",
         nsCommonConfigDataForwardPolicyRouteTable_handler,
         nsCommonConfigDataForwardPolicyRouteTable_oid,
         nsCommonConfigDataForwardPolicyRouteTable_oid_len,
         HANDLER_CAN_RWRITE);

    table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
    netsnmp_table_helper_add_indexes(table_info, ASN_UNSIGNED,  /* index: nsCommonConfigDataForwardPolicyRouteIndex */
                                     0);
    table_info->min_column =
        COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID;
    table_info->max_column =
        COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS;

    iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
    iinfo->get_first_data_point =
        nsCommonConfigDataForwardPolicyRouteTable_get_first_data_point;
    iinfo->get_next_data_point =
        nsCommonConfigDataForwardPolicyRouteTable_get_next_data_point;
    iinfo->table_reginfo = table_info;

    netsnmp_register_table_iterator(reg, iinfo);

    /*
     * Initialise the contents of the table here 
     */
}

    /*
     * Typical data structure for a row entry 
     */
struct nsCommonConfigDataForwardPolicyRouteTable_entry {
    /*
     * Index values 
     */
    u_long          nsCommonConfigDataForwardPolicyRouteIndex;

    /*
     * Column values 
     */
    u_long          nsCommonConfigDataForwardPolicyRouteInputInterfaceId;
    u_long         
        old_nsCommonConfigDataForwardPolicyRouteInputInterfaceId;
    u_long          nsCommonConfigDataForwardPolicyRouteRoutingTableId;
    u_long          old_nsCommonConfigDataForwardPolicyRouteRoutingTableId;
                    nsCommonConfigDataForwardPolicyRouteNotifyRowStatus;
         
                  old_nsCommonConfigDataForwardPolicyRouteNotifyRowStatus;

    /*
     * Illustrate using a simple linked list 
     */
    int             valid;
    struct nsCommonConfigDataForwardPolicyRouteTable_entry *next;
};

struct nsCommonConfigDataForwardPolicyRouteTable_entry
    *nsCommonConfigDataForwardPolicyRouteTable_head;

/*
 * create a new row in the (unsorted) table 
 */
struct nsCommonConfigDataForwardPolicyRouteTable_entry *
nsCommonConfigDataForwardPolicyRouteTable_createEntry(u_long
                                                      nsCommonConfigDataForwardPolicyRouteIndex,)
{
    struct nsCommonConfigDataForwardPolicyRouteTable_entry *entry;

    entry =
        SNMP_MALLOC_TYPEDEF(struct
                            nsCommonConfigDataForwardPolicyRouteTable_entry);
    if (!entry)
        return NULL;

    entry->nsCommonConfigDataForwardPolicyRouteIndex =
        nsCommonConfigDataForwardPolicyRouteIndex;
    entry->next = nsCommonConfigDataForwardPolicyRouteTable_head;
    nsCommonConfigDataForwardPolicyRouteTable_head = entry;
    return entry;
}

/*
 * remove a row from the table 
 */
void
nsCommonConfigDataForwardPolicyRouteTable_removeEntry(struct
                                                      nsCommonConfigDataForwardPolicyRouteTable_entry
                                                      *entry)
{
    struct nsCommonConfigDataForwardPolicyRouteTable_entry *ptr, *prev;

    if (!entry)
        return;                 /* Nothing to remove */

    for (ptr = nsCommonConfigDataForwardPolicyRouteTable_head, prev = NULL;
         ptr != NULL; prev = ptr, ptr = ptr->next) {
        if (ptr == entry)
            break;
    }
    if (!ptr)
        return;                 /* Can't find it */

    if (prev == NULL)
        nsCommonConfigDataForwardPolicyRouteTable_head = ptr->next;
    else
        prev->next = ptr->next;

    SNMP_FREE(entry);           /* XXX - release any other internal resources */
}


/*
 * Example iterator hook routines - using 'get_next' to do most of the work 
 */
netsnmp_variable_list *
nsCommonConfigDataForwardPolicyRouteTable_get_first_data_point(void
                                                               **my_loop_context,
                                                               void
                                                               **my_data_context,
                                                               netsnmp_variable_list
                                                               *
                                                               put_index_data,
                                                               netsnmp_iterator_info
                                                               *mydata)
{
    *my_loop_context = nsCommonConfigDataForwardPolicyRouteTable_head;
    return
        nsCommonConfigDataForwardPolicyRouteTable_get_next_data_point
        (my_loop_context, my_data_context, put_index_data, mydata);
}

netsnmp_variable_list *
nsCommonConfigDataForwardPolicyRouteTable_get_next_data_point(void
                                                              **my_loop_context,
                                                              void
                                                              **my_data_context,
                                                              netsnmp_variable_list
                                                              *
                                                              put_index_data,
                                                              netsnmp_iterator_info
                                                              *mydata)
{
    struct nsCommonConfigDataForwardPolicyRouteTable_entry *entry =
        (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
        *my_loop_context;
    netsnmp_variable_list *idx = put_index_data;

    if (entry) {
        snmp_set_var_typed_integer(idx, ASN_UNSIGNED,
                                   entry->
                                   nsCommonConfigDataForwardPolicyRouteIndex);
        idx = idx->next_variable;
        *my_data_context = (void *) entry;
        *my_loop_context = (void *) entry->next;
        return put_index_data;
    } else {
        return NULL;
    }
}


/** handles requests for the nsCommonConfigDataForwardPolicyRouteTable table */
int
nsCommonConfigDataForwardPolicyRouteTable_handler(netsnmp_mib_handler
                                                  *handler,
                                                  netsnmp_handler_registration
                                                  *reginfo,
                                                  netsnmp_agent_request_info
                                                  *reqinfo,
                                                  netsnmp_request_info
                                                  *requests)
{

    netsnmp_request_info *request;
    netsnmp_table_request_info *table_info;
    struct nsCommonConfigDataForwardPolicyRouteTable_entry *table_entry;

    DEBUGMSGTL(("nsCommonConfigDataForwardPolicyRoute:handler",
                "Processing request (%d)\n", reqinfo->mode));

    switch (reqinfo->mode) {
        /*
         * Read-support (also covers GetNext requests)
         */
    case MODE_GET:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID:
                if (!table_entry)
                {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer(request->requestvb,
                                           ASN_UNSIGNED,
                                           table_entry->
                                           nsCommonConfigDataForwardPolicyRouteInputInterfaceId);
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEROUTINGTABLEID:
                if (!table_entry)
                {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer(request->requestvb,
                                           ASN_UNSIGNED,
                                           table_entry->
                                           nsCommonConfigDataForwardPolicyRouteRoutingTableId);
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                if (!table_entry)
                {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer(request->requestvb,,
                                           table_entry->
                                           nsCommonConfigDataForwardPolicyRouteNotifyRowStatus);
                break;
            default:
                netsnmp_set_request_error(reqinfo, request,
                                          SNMP_NOSUCHOBJECT);
                break;
            }
        }
        break;

        /*
         * Write-support
         */
    case MODE_SET_RESERVE1:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID:
                /*
                 * or possibly 'netsnmp_check_vb_int_range' 
                 */
                ret =
                    netsnmp_check_vb_int(request->requestvb);
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                }
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEROUTINGTABLEID:
                /*
                 * or possibly 'netsnmp_check_vb_int_range' 
                 */
                ret =
                    netsnmp_check_vb_int(request->requestvb);
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                }
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                /*
                 * or possibly 'netsnmp_check_vb_int_range' 
                 */
                ret =
                    netsnmp_check_vb_int(request->requestvb);
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                }
                break;
            default:
                netsnmp_set_request_error(reqinfo, request,
                                          SNMP_ERR_NOTWRITABLE);
                return SNMP_ERR_NOERROR;
            }
        }
        break;

    case MODE_SET_RESERVE2:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                if (!table_row)
                {
                    table_row =
                        nsCommonConfigDataForwardPolicyRouteTable_createEntry
                        (, *table_info->indexes->val.integer);
                    if (table_row) {
                        netsnmp_insert_iterator_context(request,
                                                        table_row);
                    } else {
                        netsnmp_set_request_error(reqinfo, request,
                                                  SNMP_ERR_RESOURCEUNAVAILABLE);
                        return SNMP_ERR_NOERROR;
                    }
                }
                break;
            }
        }
        break;

    case MODE_SET_FREE:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                if (table_entry
                    && !table_entry->valid) {
                    nsCommonConfigDataForwardPolicyRouteTable_removeEntry
                        (table_data, table_row);
                }
                break;
            }
        }
        break;

    case MODE_SET_ACTION:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID:
                table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteInputInterfaceId
                    =
                    table_entry->
                    nsCommonConfigDataForwardPolicyRouteInputInterfaceId;
                table_entry->
                    nsCommonConfigDataForwardPolicyRouteInputInterfaceId =
                    *request->requestvb->val.integer;
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEROUTINGTABLEID:
                table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteRoutingTableId
                    =
                    table_entry->
                    nsCommonConfigDataForwardPolicyRouteRoutingTableId;
                table_entry->
                    nsCommonConfigDataForwardPolicyRouteRoutingTableId =
                    *request->requestvb->val.integer;
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteNotifyRowStatus
                    =
                    table_entry->
                    nsCommonConfigDataForwardPolicyRouteNotifyRowStatus;
                table_entry->
                    nsCommonConfigDataForwardPolicyRouteNotifyRowStatus =
                    *request->requestvb->val.integer;
                break;
            }
        }
        break;

    case MODE_SET_UNDO:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID:
                table_entry->
                    nsCommonConfigDataForwardPolicyRouteInputInterfaceId =
                    table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteInputInterfaceId;
                table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteInputInterfaceId
                    = 0;
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEROUTINGTABLEID:
                table_entry->
                    nsCommonConfigDataForwardPolicyRouteRoutingTableId =
                    table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteRoutingTableId;
                table_entry->
                    old_nsCommonConfigDataForwardPolicyRouteRoutingTableId
                    = 0;
                break;
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                if (table_entry
                    && !table_entry->valid) {
                    nsCommonConfigDataForwardPolicyRouteTable_removeEntry
                        (table_data, table_row);
                } else {
                    table_entry->
                        nsCommonConfigDataForwardPolicyRouteNotifyRowStatus
                        =
                        table_entry->
                        old_nsCommonConfigDataForwardPolicyRouteNotifyRowStatus;
                    table_entry->
                        old_nsCommonConfigDataForwardPolicyRouteNotifyRowStatus
                        = 0;
                }
                break;
            }
        }
        break;

    case MODE_SET_COMMIT:
        for (request = requests; request; request = request->next) {
            table_entry =
                (struct nsCommonConfigDataForwardPolicyRouteTable_entry *)
                netsnmp_extract_iterator_context(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS:
                if (table_entry
                    && !table_entry->valid) {
                    table_entry->valid = 1;
                }
            }
        }
        break;
    }
    return SNMP_ERR_NOERROR;
}
nsCommonConfigDataForwardPolicyRoute.h (application/octet-stream, 1.1 KB)
/*
 * Note: this file originally auto-generated by mib2c using
 *  : mib2c.iterate.conf 17695 2009-07-21 12:22:18Z dts12 $
 */
#ifndef NSCOMMONCONFIGDATAFORWARDPOLICYROUTE_H
#define NSCOMMONCONFIGDATAFORWARDPOLICYROUTE_H

/*
 * function declarations 
 */
void            init_nsCommonConfigDataForwardPolicyRoute(void);
void           
initialize_table_nsCommonConfigDataForwardPolicyRouteTable(void);
Netsnmp_Node_Handler nsCommonConfigDataForwardPolicyRouteTable_handler;
Netsnmp_First_Data_Point
    nsCommonConfigDataForwardPolicyRouteTable_get_first_data_point;
Netsnmp_Next_Data_Point
    nsCommonConfigDataForwardPolicyRouteTable_get_next_data_point;

/*
 * column number definitions for table nsCommonConfigDataForwardPolicyRouteTable 
 */
#define COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINDEX		1
#define COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEINPUTINTERFACEID		2
#define COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTEROUTINGTABLEID		3
#define COLUMN_NSCOMMONCONFIGDATAFORWARDPOLICYROUTENOTIFYROWSTATUS		4
#endif                          /* NSCOMMONCONFIGDATAFORWARDPOLICYROUTE_H */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.