Hi All,

I have generated mfd files for ETHTOOL-MIB following the example of
http://vincent.bernat.im/en/blog/2012-extending-netsnmp.html.
I did the changes on my files as he had done.

And used the following command for compiling subagent

net-snmp-config --compile-subagent mysub ethtoolStatTable.c

I got the following error :

generating the temporary code file: netsnmptmp.3771.c
void init_ethtoolStatTable(void);
checking for init_ethtoolStatTable in ethtoolStatTable.c
init_ethtoolStatTable(void)

DEBUGMSGTL(("verbose:ethtoolStatTable:init_ethtoolStatTable","called\n"));
} /* init_ethtoolStatTable */
checking for shutdown_ethtoolStatTable in ethtoolStatTable.c
shutdown_ethtoolStatTable(void)
running: gcc  -fno-strict-aliasing -g -O2 -Ulinux -Dlinux=linux
-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-I/usr/local/lib/perl5/5.18.2/x86_64-linux-thread-multi/CORE   -I.
-I/usr/local/include -o mysub netsnmptmp.3771.c  ethtoolStatTable.c
-L/usr/local/ssl/lib  -L/usr/local/lib -lnetsnmpmibs -lnetsnmpagent
-lnetsnmp -lnetsnmpmibs -ldl  -lnetsnmpagent  -Wl,-E
-Wl,-rpath,/usr/local/lib/perl5/5.18.2/x86_64-linux-thread-multi/CORE
-lnetsnmp
/tmp/ccNfcjfS.o: In function `shutdown_table_ethtoolStatTable':
/home/dell/ethtoolStatTable/ethtoolStatTable.c:114: undefined reference to
`_ethtoolStatTable_shutdown_interface'
/tmp/ccNfcjfS.o: In function `initialize_table_ethtoolStatTable':
/home/dell/ethtoolStatTable/ethtoolStatTable.c:102: undefined reference to
`_ethtoolStatTable_initialize_interface'
/tmp/ccNfcjfS.o: In function `shutdown_table_ethtoolStatTable':
/home/dell/ethtoolStatTable/ethtoolStatTable.c:114: undefined reference to
`_ethtoolStatTable_shutdown_interface'
collect2: error: ld returned 1 exit status
removing the temporary code file: netsnmptmp.3771.c

I believe it has to do with ethtoolStatTable.h config commands

/*
 * Note: this file originally auto-generated by mib2c using
 *       version : 14170 $ of $
 *
 * $Id:$
 */
#ifndef ETHTOOLSTATTABLE_H
#define ETHTOOLSTATTABLE_H

#ifdef __cplusplus
extern "C" {
#endif


/** @addtogroup misc misc: Miscellaneous routines
 *
 * @{
 */
#include <net-snmp/library/asn1.h>

/* other required module components */
    /* *INDENT-OFF*  */
config_add_mib(ETHTOOL-MIB)
config_require(ETHTOOL-MIB/ethtoolStatTable/ethtoolStatTable_interface)
config_require(ETHTOOL-MIB/ethtoolStatTable/ethtoolStatTable_data_access)
config_require(ETHTOOL-MIB/ethtoolStatTable/ethtoolStatTable_data_get)
config_require(ETHTOOL-MIB/ethtoolStatTable/ethtoolStatTable_data_set)
    /* *INDENT-ON*  */

/* OID and column number definitions for ethtoolStatTable */
#include "ethtoolStatTable_oids.h"

/* enum definions */
#include "ethtoolStatTable_enums.h"

/* *********************************************************************
 * function declarations
 */
void init_ethtoolStatTable(void);
void shutdown_ethtoolStatTable(void);

/* *********************************************************************
 * Table declarations
 */
/**********************************************************************
 **********************************************************************
 ***
 *** Table ethtoolStatTable
 ***
 **********************************************************************
 **********************************************************************/
/*
 * ETHTOOL-MIB::ethtoolStatTable is subid 1 of ethtool.
 * Its status is Current.
 * OID: .1.3.6.1.4.1.39178.100.1.1, length: 10
*/
/* *********************************************************************
 * When you register your mib, you get to provide a generic
 * pointer that will be passed back to you for most of the
 * functions calls.
 *
 * TODO:100:r: Review all context structures
 */
    /*
     * TODO:101:o: |-> Review ethtoolStatTable registration context.
     */
typedef netsnmp_data_list ethtoolStatTable_registration;

/**********************************************************************/
/*
 * TODO:110:r: |-> Review ethtoolStatTable data context structure.
 * This structure is used to represent the data for ethtoolStatTable.
 */
/*
 * This structure contains storage for all the columns defined in the
 * ethtoolStatTable.
 */
typedef struct ethtoolStatTable_data_s {

        /*
         * ethtoolStat(2)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
         */
   U64   ethtoolStat;

} ethtoolStatTable_data;


/*
 * TODO:120:r: |-> Review ethtoolStatTable mib index.
 * This structure is used to represent the index for ethtoolStatTable.
 */
typedef struct ethtoolStatTable_mib_index_s {

        /*
         * ifIndex(1)/InterfaceIndex/ASN_INTEGER/long(long)//l/A/w/e/R/d/H
         */
   long   ifIndex;

        /*
         *
ethtoolStatName(1)/ShortDisplayString/ASN_OCTET_STR/char(char)//L/a/w/e/R/d/H
         */
   char   ethtoolStatName[100];
   size_t      ethtoolStatName_len;


} ethtoolStatTable_mib_index;

    /*
     * TODO:121:r: |   |-> Review ethtoolStatTable max index length.
     * If you KNOW that your indexes will never exceed a certain
     * length, update this macro to that length.
     *
     * BE VERY CAREFUL TO TAKE INTO ACCOUNT THE MAXIMUM
     * POSSIBLE LENGHT FOR EVERY VARIABLE LENGTH INDEX!
     * Guessing 128 - col/entry(2)  - oid len(10)
*/
#define MAX_ethtoolStatTable_IDX_LEN     102


/* *********************************************************************
 * TODO:130:o: |-> Review ethtoolStatTable Row request (rowreq) context.
 * When your functions are called, you will be passed a
 * ethtoolStatTable_rowreq_ctx pointer.
 */
typedef struct ethtoolStatTable_rowreq_ctx_s {

    /** this must be first for container compare to work */
    netsnmp_index        oid_idx;
    oid                  oid_tmp[MAX_ethtoolStatTable_IDX_LEN];

    ethtoolStatTable_mib_index        tbl_idx;

    ethtoolStatTable_data              data;

    /*
     * flags per row. Currently, the first (lower) 8 bits are reserved
     * for the user. See mfd.h for other flags.
     */
    u_int                       rowreq_flags;

    /*
     * TODO:131:o: |   |-> Add useful data to ethtoolStatTable rowreq
context.
     */

    /*
     * storage for future expansion
     */
    netsnmp_data_list             *ethtoolStatTable_data_list;

} ethtoolStatTable_rowreq_ctx;

typedef struct ethtoolStatTable_ref_rowreq_ctx_s {
    ethtoolStatTable_rowreq_ctx *rowreq_ctx;
} ethtoolStatTable_ref_rowreq_ctx;

/* *********************************************************************
 * function prototypes
 */
    int ethtoolStatTable_pre_request(ethtoolStatTable_registration *
user_context);
    int ethtoolStatTable_post_request(ethtoolStatTable_registration *
user_context,
        int rc);


    ethtoolStatTable_rowreq_ctx *

ethtoolStatTable_row_find_by_mib_index(ethtoolStatTable_mib_index *mib_idx);

extern oid ethtoolStatTable_oid[];
extern int ethtoolStatTable_oid_size;


#include "ethtoolStatTable_interface.h"
#include "ethtoolStatTable_data_access.h"
#include "ethtoolStatTable_data_get.h"
#include "ethtoolStatTable_data_set.h"

/*
 * DUMMY markers, ignore
 *
 * TODO:099:x: *************************************************************
 * TODO:199:x: *************************************************************
 * TODO:299:x: *************************************************************
 * TODO:399:x: *************************************************************
 * TODO:499:x: *************************************************************
 */

#ifdef __cplusplus
}
#endif

#endif /* ETHTOOLSTATTABLE_H */
/** @} */

Should i change the path in config_require?

I tried by using
config_require(ethtoolStatTable_interface)
config_require(ethtoolStatTable_data_access)
config_require(ethtoolStatTable_data_get)
config_require(ethtoolStatTable_data_set)

and also by including the folder where all files including defaults
reside(ethtool1) :
config_require(ethtool1/ethtoolStatTable_interface)
config_require(ethtool1/ethtoolStatTable_data_access)
config_require(ethtool1/ethtoolStatTable_data_get)
config_require(ethtool1/ethtoolStatTable_data_set)

Its all giving the same error finally.

Have I missed out changing anything else??

Thanks
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to