Re: cache problems with table data mib2c

Kathy McLeod <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <OFE9B2DEFC.A8F95DF1-ON86257743.006F3763-86257743.00721EC1@us.ibm.com>
Hi -

Here are the files I was using before  (See attached file:
lldpPortConfigTable.c)(See attached file: lldpPortConfigTable.h)and here is
my compile command

gcc `net-snmp-config --cflags` -fPIC -shared -g -O0 -o
lldpPortConfigTable.so lldpPortConfigTable.c `net-snmp-config --libs`

These files are pretty much the same, except for the debug messages, and I
added struct back in and changed to HANDLER based on your comments below,
and I changed back to .c and .h (I only need .C and .H for newer code).

I think your diagnosis is correct.  It is setting up for the row and column
in the old table and then when those rows are not in the new table, I get
errors.  This does not seem correct to me - isn't the point of reloading to
have the latest and greatest before the handler is called?

(Also, there is still the issue of unload happening in the middle of a
command being handled.  I can avoid that when testing because I know when
the timer will expire, but that is going to be a problem with customers.)

Here are my results:

With the flags set to check with my code before unloading and reloading,
and currently a 20 second timer and testFlag always TRUE:

command			reloads				result

snmpbulkwalk			yes				seg. fault

snmpbulkget                            yes				gets old
values, or a seg. fault

snmptable			yes				seg. fault

snmpget			yes 				gets old vals, or rarely a
seg. fault

snmpgetnext			yes				gets old next value

snmpwalk			yes				seg. fault, or ok but has
one old row and then the new
rows

snmpset			yes				seg. fault

With the flags off, so it unloads when the timer expires and reloads (or
should) when an instruction is issued:

snmpbulkwalk			no				"No such instance" message

snmpbulkget			no				gets from the next MIB,
SNMPv2-MIB

snmptable			no				"No entries" message

snmpget			yes				gets old value

snmpgetnext			yes				gets first in new table
(when val from old table was used
on command)

snmpwalk			no				nothing shows up on command
line

snmpset			no				seg. fault

Thanks.


Kathy McLeod
Dept S82  CCB - SNMP
IBM Rochester, MN
(507) 253-4803


                                                                           
             Dave Shield                                                   
             <D.T.Shield@liver                                             
             pool.ac.uk>                                                To 
             Sent by:                  Kathy McLeod/Rochester/IBM@IBMUS    
             dave.shield@googl                                          cc 
             email.com                 net-snmp users                      
                                       <[email protected] 
                                       et>                                 
             06/15/2010 03:27                                      Subject 
             AM                        Re: cache problems with table data  
                                       mib2c                               
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




On 14 June 2010 20:25, Kathy McLeod <[email protected]> wrote:
> (See attached file: lldpPortConfigTable.C)

Unfortunately, this file did not actually compile.
(it complained about line 210
   entry = SNMP_MALLOC_TYPEDEF(lldpPortConfigTable_entry);
       which should presumable be "struct lldpPortConfigTable_entry"
)
This is slightly worrying, since it implies you are working with
a different code file than the version you supplied.


> Summary of problems is 1) load is only called for an snmpget, not for
other
> commands; 2) the first get after the load always fails, and then when I
> repeat the command, it works (I am testing using a command line
interface);

Hmmm...   this sounds as if the cache load routine is being called *after*
the decisions about which row of the table to process, rather than before.

Try tweaking the injection of the cache handler to use 'TABLE_HANDLER_NAME'
rather than 'TABLE_TDATA_NAME'.   That seems to trigger the cache load
at a slightly earlier point, so that it's available both for the first
GET request,
and also for GETNEXT (and similar) requests.


Dave

------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo

_______________________________________________
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
lldpPortConfigTable.c (application/octet-stream, 19.9 KB)
/*
 * Note: this file originally auto-generated by mib2c using
 *  : mib2c.table_data.conf 16004 2007-03-27 09:20:28Z 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 <net-snmp/library/tools.h>
#include <net-snmp/agent/cache_handler.h>
#include <net-snmp/agent/table_tdata.h>
#include <lldpPortConfigTable.h>
//#include <utils.H>
//#include <ethm/base/EthMgr.H>

static oid      lldpPortConfigTable_oid[] =
        { 1, 0, 8802, 1, 1, 2, 1, 1, 6 };
size_t          lldpPortConfigTable_oid_len =
        OID_LENGTH(lldpPortConfigTable_oid);

netsnmp_tdata_row * lldpPortConfigTable_createEntry(netsnmp_tdata * table_data,
                                long lldpPortConfigPortNum);

static char bits[] = {0x80, 0x40, 0x20, 0x10};
static char nullset = 0x00;

static port_tab_entry_t *tempNode;

int checkNumericRange(int min, int max, int newValue)
{
   if (newValue >= min &&
       newValue <= max)
       return(SNMP_ERR_NOERROR);
   else
      return(SNMP_ERR_WRONGVALUE);
}

int checkBoolean(int newValue)
{
   if (newValue == TRUE ||
       newValue == FALSE)
       return(SNMP_ERR_NOERROR);
   else
      return(SNMP_ERR_WRONGVALUE);
}

int checkTlvsBITS(int newVal)
{
    if (newVal == nullset ||
        newVal == bits[0] ||
        newVal == bits[1] ||
        newVal == bits[2] ||
        newVal == bits[3])
        return(SNMP_ERR_NOERROR);
    else
      return(SNMP_ERR_WRONGVALUE);	
} 

   /*
     * Typical data structure for a row entry 
     */
struct lldpPortConfigTable_entry {
    /*
    * Index values 
     */
    long            lldpPortConfigPortNum;

    /*
     * Column values 
     */
    long            lldpPortConfigAdminStatus;
    long            old_lldpPortConfigAdminStatus;
    long            lldpPortConfigNotificationEnable;
    long            old_lldpPortConfigNotificationEnable;
    char            lldpPortConfigTLVsTxEnable[1];
    size_t          lldpPortConfigTLVsTxEnable_len;
    char            old_lldpPortConfigTLVsTxEnable[1];
    size_t          old_lldpPortConfigTLVsTxEnable_len;

    int             valid;
};

/** Initializes the lldpPortConfigTable module */
void
init_lldpPortConfigTable(void)
{
    /*
     * here we initialize all the tables we're planning on supporting 
     */
    initialize_table_lldpPortConfigTable();
}

/*# Determine the first/last column names */

/** Initialize the lldpPortConfigTable table by defining its contents and how it's structured */
void
initialize_table_lldpPortConfigTable(void)
{
    static oid      lldpPortConfigTable_oid[] =
        { 1, 0, 8802, 1, 1, 2, 1, 1, 6 };
    size_t          lldpPortConfigTable_oid_len =
        OID_LENGTH(lldpPortConfigTable_oid);
    netsnmp_handler_registration *reg;
    netsnmp_tdata  *table_data;
    netsnmp_table_registration_info *table_info;
    netsnmp_cache  *cache;
//    netsnmp_tdata_row *row; 
//    short int i = 0;
//    struct lldpPortConfigTable_entry * ent;
     
    //entry = SNMP_MALLOC_TYPEDEF(struct lldpPortConfigTable_entry);
    
    //if(!entry)
      //return 0;

 //   row = netsnmp_tdata_create_row();
    //if(!row) {
      //  SNMP_FREE(entry);
       // return 0;
//    }
//    row->data = entry;  
    DEBUGMSGTL(("lldpPortConfigTable", "initing table1\n"));
    if (alreadyReg > 0)
      return;

    DEBUGMSGTL(("lldpPortConfigTable", "initing table\n"));	


    reg =
        netsnmp_create_handler_registration("lldpPortConfigTable",
                                            lldpPortConfigTable_handler,
                                            lldpPortConfigTable_oid,
                                            lldpPortConfigTable_oid_len,
                                            HANDLER_CAN_RWRITE);

    table_data = netsnmp_tdata_create_table("lldpPortConfigTable", 0);
    table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
    netsnmp_table_helper_add_indexes(table_info, ASN_INTEGER,   /* index: lldpPortConfigPortNum */
                                     0);

    table_info->min_column = COLUMN_LLDPPORTCONFIGADMINSTATUS;
    table_info->max_column = COLUMN_LLDPPORTCONFIGTLVSTXENABLE;

    netsnmp_tdata_register(reg, table_data, table_info);
    cache = netsnmp_cache_create(LLDPPORTCONFIGTABLE_TIMEOUT,
                                 lldpPortConfigTable_load,
                                 lldpPortConfigTable_free,
                                 lldpPortConfigTable_oid,
                                 lldpPortConfigTable_oid_len);
    cache->magic = (void *) table_data;
    netsnmp_inject_handler_before(reg, netsnmp_cache_handler_get(cache), TABLE_HANDLER_NAME);

        /*
         * Initialise the contents of the table here 
         */
DEBUGMSGTL(("lldpPortConfigTable", "check and reload\n"));

    netsnmp_cache_check_and_reload( cache ); 

 /*   tempNode = SNMP_MALLOC_TYPEDEF(port_tab_entry_t);
    for(i=0; i<4; i++)
    {
DEBUGMSGTL(("lldpPortConfigTable", "for loop%d\n", i));
       
       tempNode->port_tab_portnum = i+1;  
       tempNode->port_tab_status  = (i+1) % 5;*/ /* 1 thru 4 */
 //      tempNode->port_tab_notify = i % 2;     /* true or false */
 //      tempNode->port_tab_tlvs     = bits[i];   /* 0 - 3 */
 //      row = lldpPortConfigTable_createEntry(table_data, tempNode->port_tab_portnum);

 /*      ent = (struct lldpPortConfigTable_entry*) (row->data);
       ent->lldpPortConfigAdminStatus = tempNode->port_tab_status;
       ent->old_lldpPortConfigAdminStatus = 0;
       ent->lldpPortConfigNotificationEnable = tempNode->port_tab_notify;
       ent->old_lldpPortConfigAdminStatus = 0;
       ent->lldpPortConfigTLVsTxEnable[0] = tempNode->port_tab_tlvs;
       ent->lldpPortConfigTLVsTxEnable_len = 1;
       ent->old_lldpPortConfigTLVsTxEnable[0] = 0;
       ent->old_lldpPortConfigTLVsTxEnable_len = 1;
    }
    SNMP_FREE(tempNode);
    tempNode = NULL; */
    alreadyReg = 1;
    alreadyDereg = 0;
}

void  deinit_lldpPortConfigTable(void) {
     DEBUGMSGTL(("lldpPortConfigTable", "deiniting1 mibs\n"));
     if (alreadyDereg > 0)
	return;	
     DEBUGMSGTL(("lldpPortConfigTable", "deiniting mibs\n")); 	
     /* int unregister_mib(oid *, size_t); */
     unregister_mib(lldpPortConfigTable_oid, lldpPortConfigTable_oid_len); 
     alreadyDereg = 1;	
     alreadyReg = 0;
}

 

/*
 * create a new row in the table 
 */
netsnmp_tdata_row *lldpPortConfigTable_createEntry(netsnmp_tdata *
                                                   table_data,
                                                   long
                                                   lldpPortConfigPortNum) {
    struct lldpPortConfigTable_entry *entry;
    netsnmp_tdata_row *row;        
         
    entry = SNMP_MALLOC_TYPEDEF(struct lldpPortConfigTable_entry);
    if(!entry)
      return NULL;

    row = netsnmp_tdata_create_row();
    if(!row) {
        SNMP_FREE(entry);
        return NULL;
    }
    row->data = entry;
    entry->lldpPortConfigPortNum = lldpPortConfigPortNum;
// test ascending but not consecutive indexes 
//    entry->lldpPortConfigPortNum = 2*lldpPortConfigPortNum; 
// test unordered index
//    entry->lldpPortConfigPortNum = 60 - (8*lldpPortConfigPortNum);
    netsnmp_tdata_row_add_index(row, ASN_INTEGER,
                                &(entry->lldpPortConfigPortNum),
                                sizeof(entry->lldpPortConfigPortNum));
    /*****************************/
/*    entry->lldpPortConfigAdminStatus = tempNode->port_tab_status;
    entry->old_lldpPortConfigAdminStatus = 0;
    entry->lldpPortConfigNotificationEnable = tempNode->port_tab_notify;
    entry->old_lldpPortConfigAdminStatus = 0;
    entry->lldpPortConfigTLVsTxEnable[0] = tempNode->port_tab_tlvs;
    entry->lldpPortConfigTLVsTxEnable_len = 1;
    entry->old_lldpPortConfigTLVsTxEnable[0] = 0;
    entry->old_lldpPortConfigTLVsTxEnable_len = 1; */
/*****************************/
    netsnmp_tdata_add_row(table_data, row);
    return row;
}

/*
 * remove a row from the table 
 */
void    
    lldpPortConfigTable_removeEntry(netsnmp_tdata * table_data,
                                    netsnmp_tdata_row * row) {
    struct lldpPortConfigTable_entry *entry;

    if (!row)
        return;                 /* Nothing to remove */
    entry = (struct lldpPortConfigTable_entry *)
        netsnmp_tdata_remove_and_delete_row(table_data, row);
    if (entry)
        SNMP_FREE(entry);       /* XXX - release any other internal resources */
}

/*
 * Example cache handling - set up table_data list from a suitable file 
 */
static short int j = 0;
int
    lldpPortConfigTable_load(netsnmp_cache * cache, void *vmagic) {
    netsnmp_tdata * table = (netsnmp_tdata *) vmagic;
    netsnmp_tdata_row *row;

    short int i; 
    
    struct lldpPortConfigTable_entry * ent;
  
     
/*    entry = SNMP_MALLOC_TYPEDEF(struct lldpPortConfigTable_entry);
    
    if(!entry)
      return 0;

    row = netsnmp_tdata_create_row();
    if(!row) {
        SNMP_FREE(entry);
        return 0;
    }
    row->data = entry; */
 
DEBUGMSGTL(("lldpPortConfigTable", "cache load\n"));  
         
     /*
         * Initialise the contents of the table here 
         */
    DEBUGMSGTL(("lldpPortConfigTable", "cache for loop\n"));

    tempNode = SNMP_MALLOC_TYPEDEF(port_tab_entry_t);
    for(i=j; i<j+4; i++)
    {
DEBUGMSGTL(("lldpPortConfigTable", "cache for loop%d\n", i));
       
       tempNode->port_tab_portnum = i+1;  
       tempNode->port_tab_status  = (i+1) % 4 + 1; /* 1 thru 4 */
       tempNode->port_tab_notify = i % 2;     /* true or false */
       tempNode->port_tab_tlvs     = bits[i % 4];   /* 0 - 3 */
       row = lldpPortConfigTable_createEntry(table, tempNode->port_tab_portnum);
       ent = (struct lldpPortConfigTable_entry *)(row->data);
       ent->lldpPortConfigAdminStatus = tempNode->port_tab_status;
       ent->old_lldpPortConfigAdminStatus = 0;
       ent->lldpPortConfigNotificationEnable = tempNode->port_tab_notify;
       ent->old_lldpPortConfigAdminStatus = 0;
       ent->lldpPortConfigTLVsTxEnable[0] = tempNode->port_tab_tlvs;
       ent->lldpPortConfigTLVsTxEnable_len = 1;
       ent->old_lldpPortConfigTLVsTxEnable[0] = 0;
       ent->old_lldpPortConfigTLVsTxEnable_len = 1;
DEBUGMSGTL(("lldpPortConfigTable", "cache for loop bottom%d\n", i));
   }
   j = i;
   SNMP_FREE(tempNode); 
   tempNode = NULL;
DEBUGMSGTL(("lldpPortConfigTable", "cache after loop%d\n", j));
   return(SNMP_ERR_NOERROR);
    
}

void 
    lldpPortConfigTable_free(netsnmp_cache * cache, void *vmagic) {
//    netsnmp_tdata * table = (netsnmp_tdata *) vmagic;
    netsnmp_tdata_row *thisRow;
    netsnmp_tdata * table;
    table = (netsnmp_tdata *) vmagic;
DEBUGMSGTL(("lldpPortConfigTable", "cache free\n"));

/* change from netsnmp_tdata_get_first_row */
    while ((thisRow = netsnmp_tdata_row_first(table))) {
DEBUGMSGTL(("lldpPortConfigTable", "cache free while\n"));        
        netsnmp_tdata_remove_and_delete_row(table, thisRow);
DEBUGMSGTL(("lldpPortConfigTable", "cache free while2\n"));  
    }
}

/** handles requests for the lldpPortConfigTable table */
 int lldpPortConfigTable_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;
    netsnmp_tdata * table_data;
    netsnmp_tdata_row *table_row;
    struct lldpPortConfigTable_entry *table_entry;
    int  ret;

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

            switch (table_info->colnum) {
            case COLUMN_LLDPPORTCONFIGADMINSTATUS:
                if (!table_entry) {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
                                           table_entry->
                                           lldpPortConfigAdminStatus);
                break;
            case COLUMN_LLDPPORTCONFIGNOTIFICATIONENABLE:
                if (!table_entry) {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER,
                                           table_entry->
                                           lldpPortConfigNotificationEnable);
                break;
            case COLUMN_LLDPPORTCONFIGTLVSTXENABLE:
                if (!table_entry) {
                    netsnmp_set_request_error(reqinfo, request,
                                              SNMP_NOSUCHINSTANCE);
                    continue;
                }
                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR,
                                         (u_char *) table_entry->
                                         lldpPortConfigTLVsTxEnable,
                                         table_entry->
                                         lldpPortConfigTLVsTxEnable_len);
                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 lldpPortConfigTable_entry *)
                netsnmp_tdata_extract_entry(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_LLDPPORTCONFIGADMINSTATUS:
                /*
                 * 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;
                }

                ret = checkNumericRange(1, 4, *request->requestvb->val.integer);
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                }
                break;
            case COLUMN_LLDPPORTCONFIGNOTIFICATIONENABLE:
                /*
                 * 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;
                }

                ret = checkBoolean(*request->requestvb->val.integer);
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                } 
                break;
            case COLUMN_LLDPPORTCONFIGTLVSTXENABLE:
                /*
                 * or possiblc 'netsnmp_check_vb_type_and_size' 
                 */
                ret =
                    netsnmp_check_vb_type_and_max_size(request->requestvb,
                                                       ASN_OCTET_STR,
                                                       sizeof(table_entry->
                                                              lldpPortConfigTLVsTxEnable));
                if (ret != SNMP_ERR_NOERROR) {
                    netsnmp_set_request_error(reqinfo, request, ret);
                    return SNMP_ERR_NOERROR;
                }

                ret = checkTlvsBITS(*request->requestvb->val.string);
                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:
        break;

    case MODE_SET_FREE:
        break;

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

            switch (table_info->colnum) {
            case COLUMN_LLDPPORTCONFIGADMINSTATUS:
                table_entry->old_lldpPortConfigAdminStatus =
                    table_entry->lldpPortConfigAdminStatus;
                table_entry->lldpPortConfigAdminStatus =
                    *request->requestvb->val.integer;
                break;
            case COLUMN_LLDPPORTCONFIGNOTIFICATIONENABLE:
                table_entry->old_lldpPortConfigNotificationEnable =
                    table_entry->lldpPortConfigNotificationEnable;
                table_entry->lldpPortConfigNotificationEnable =
                    *request->requestvb->val.integer;
                break;
            case COLUMN_LLDPPORTCONFIGTLVSTXENABLE:
                memcpy(table_entry->old_lldpPortConfigTLVsTxEnable,
                       table_entry->lldpPortConfigTLVsTxEnable,
                       sizeof(table_entry->lldpPortConfigTLVsTxEnable));
                table_entry->old_lldpPortConfigTLVsTxEnable_len =
                    table_entry->lldpPortConfigTLVsTxEnable_len;
                memset(table_entry->lldpPortConfigTLVsTxEnable, 0,
                       sizeof(table_entry->lldpPortConfigTLVsTxEnable));
                memcpy(table_entry->lldpPortConfigTLVsTxEnable,
                       request->requestvb->val.string,
                       request->requestvb->val_len);
                table_entry->lldpPortConfigTLVsTxEnable_len =
                    request->requestvb->val_len;
                break;
            }
        }
        break;

    case MODE_SET_UNDO:
        for (request = requests; request; request = request->next) {
            table_entry = (struct lldpPortConfigTable_entry *)
                netsnmp_tdata_extract_entry(request);
            table_row = netsnmp_tdata_extract_row(request);
            table_data = netsnmp_tdata_extract_table(request);
            table_info = netsnmp_extract_table_info(request);

            switch (table_info->colnum) {
            case COLUMN_LLDPPORTCONFIGADMINSTATUS:
                table_entry->lldpPortConfigAdminStatus =
                    table_entry->old_lldpPortConfigAdminStatus;
                table_entry->old_lldpPortConfigAdminStatus = 0;
                break;
            case COLUMN_LLDPPORTCONFIGNOTIFICATIONENABLE:
                table_entry->lldpPortConfigNotificationEnable =
                    table_entry->old_lldpPortConfigNotificationEnable;
                table_entry->old_lldpPortConfigNotificationEnable = 0;
                break;
            case COLUMN_LLDPPORTCONFIGTLVSTXENABLE:
                memcpy(table_entry->lldpPortConfigTLVsTxEnable,
                       table_entry->old_lldpPortConfigTLVsTxEnable,
                       sizeof(table_entry->lldpPortConfigTLVsTxEnable));
                memset(table_entry->old_lldpPortConfigTLVsTxEnable, 0,
                       sizeof(table_entry->lldpPortConfigTLVsTxEnable));
                table_entry->lldpPortConfigTLVsTxEnable_len =
                    table_entry->old_lldpPortConfigTLVsTxEnable_len;
                break;
            }
        }
        break;

    case MODE_SET_COMMIT:
        break;
    }
    return SNMP_ERR_NOERROR;
}
lldpPortConfigTable.h (application/octet-stream, 1.1 KB)
/*
 * Note: this file originally auto-generated by mib2c using
 *  : mib2c.table_data.conf 16004 2007-03-27 09:20:28Z dts12 $
 */
#ifndef LLDPPORTCONFIGTABLE_H
#define LLDPPORTCONFIGTABLE_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * function declarations 
 */
void            init_lldpPortConfigTable(void);
void            initialize_table_lldpPortConfigTable(void);
void            deinit_lldpPortConfigTable(void);

Netsnmp_Node_Handler lldpPortConfigTable_handler;
NetsnmpCacheLoad lldpPortConfigTable_load;
NetsnmpCacheFree lldpPortConfigTable_free;
#define LLDPPORTCONFIGTABLE_TIMEOUT  30 // 30, 60, -1

/*
 * column number definitions for table lldpPortConfigTable 
 */
#define COLUMN_LLDPPORTCONFIGPORTNUM		1
#define COLUMN_LLDPPORTCONFIGADMINSTATUS		2
#define COLUMN_LLDPPORTCONFIGNOTIFICATIONENABLE		3
#define COLUMN_LLDPPORTCONFIGTLVSTXENABLE		4

typedef struct port_tab_entry_s {
   long  port_tab_portnum;
   long  port_tab_status;
   long  port_tab_notify;
   char  port_tab_tlvs;
} port_tab_entry_t;

static int alreadyReg = 0;
static int alreadyDereg = 0;
#endif                          /* LLDPPORTCONFIGTABLE_H */

#ifdef __cplusplus
}
#endif
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.