/** Initialize the mteEventTable table by defining its contents and how it's structured */ void initialize_table_mteEventTable(void) { static oid mteEventTable_oid[] = { 1, 3, 6, 1, 2, 1, 88, 1, 4, 2 }; size_t mteEventTable_oid_len = OID_LENGTH(mteEventTable_oid); /* * create the table structure itself */ table_set = netsnmp_create_table_data_set("mteEventTable"); /* * comment this out or delete if you don't support creation of new rows */ table_set->allow_creation = 1; /* mark the row status column */ table_set->rowstatus_column = COLUMN_MTEEVENTENTRYSTATUS; /*************************************************** * Adding indexes */ DEBUGMSGTL(("initialize_table_mteEventTable", "adding indexes to table mteEventTable\n")); netsnmp_table_set_add_indexes(table_set, ASN_OCTET_STR, /* index: mteOwner */ ASN_PRIV_IMPLIED_OCTET_STR, /* index: mteEventName */ 0); DEBUGMSGTL(("initialize_table_mteEventTable", "adding column types to table mteEventTable\n")); netsnmp_table_set_multi_add_default_row(table_set, COLUMN_MTEEVENTNAME, ASN_OCTET_STR, 0, NULL, 0, COLUMN_MTEEVENTCOMMENT, ASN_OCTET_STR, 1, NULL, 0, COLUMN_MTEEVENTACTIONS, ASN_OCTET_STR, 1, NULL, 0, COLUMN_MTEEVENTENABLED, ASN_INTEGER, 1, NULL, 0, COLUMN_MTEEVENTENTRYSTATUS, ASN_INTEGER, 1, NULL, 0, 0); /* keep index values around for comparisons later */ table_set->table->store_indexes = 1; /* * registering the table with the master agent */ /* * note: if you don't need a subhandler to deal with any aspects * of the request, change mteEventTable_handler to "NULL" */ netsnmp_register_table_data_set(netsnmp_create_handler_registration ("mteEventTable", mteEventTable_handler, mteEventTable_oid, mteEventTable_oid_len, HANDLER_CAN_RWRITE), table_set, NULL); }
/** Initializes the mgPIDECMTable module */ void init_mgPIDECMTable(void) { /* here we initialize all the tables we're planning on supporting */ /* create the table structure itself */ table_set = netsnmp_create_table_data_set("mgPIDECMTable"); netsnmp_mib_handler *cache_handler; /* comment this out or delete if you don't support creation of new rows */ table_set->allow_creation = 1; /*************************************************** * Adding indexes */ DEBUGMSGTL(("initialize_table_mgPIDECMTable", "adding indexes to table mgPIDECMTable\n")); netsnmp_table_set_add_indexes(table_set, ASN_INTEGER, /* index: mgPIDECMInputNumber */ ASN_INTEGER, /* index: mgPIDECMServiceNumber */ ASN_INTEGER, /* index: mgPIDECMPID */ 0); DEBUGMSGTL(("initialize_table_mgPIDECMTable", "adding column types to table mgPIDECMTable\n")); netsnmp_table_set_multi_add_default_row(table_set, COLUMN_MGPIDECMINPUTNUMBER, ASN_INTEGER, 0, NULL, 0, COLUMN_MGPIDECMSERVICENUMBER, ASN_INTEGER, 0, NULL, 0, COLUMN_MGPIDECMPID, ASN_INTEGER, 0, NULL, 0, COLUMN_MGPIDECMCAPID, ASN_INTEGER, 0, NULL, 0, COLUMN_MGPIDECMCASYSTEMID, ASN_INTEGER, 0, NULL, 0, 0); /* registering the table with the master agent */ /* note: if you don't need a subhandler to deal with any aspects of the request, change mgPIDECMTable_handler to "NULL" */ netsnmp_handler_registration *reginfo = netsnmp_create_handler_registration("mgPIDECMTable", NULL, mgPIDECMTable_oid, OID_LENGTH(mgPIDECMTable_oid), HANDLER_CAN_RWRITE); netsnmp_register_table_data_set(reginfo, table_set, NULL); DEBUGMSGTL(("mgPIDECMTable", "Done initalizing mgPIDECMTable module\n")); cache_handler = netsnmp_get_cache_handler(LONGCACHETIMEOUT, /* how long a cache is valid for */ cache_load, /* a pointer to the cache loading function */ cache_free, /* a pointer to the cache freeing function */ mgPIDECMTable_oid, OID_LENGTH(mgPIDECMTable_oid)); /* the OID of the registration point */ netsnmp_inject_handler(reginfo, cache_handler); }
/** Initialize the mytestTable table by defining its contents and how it's structured */ void initialize_table_mytestTable(void) { static oid mytestTable_oid[] = { 1, 3, 6, 1, 4, 1, 8072, 2, 70, 1, 3 }; size_t mytestTable_oid_len = OID_LENGTH(mytestTable_oid); netsnmp_table_data_set *table_set; /* * create the table structure itself */ table_set = netsnmp_create_table_data_set("mytestTable"); /* * comment this out or delete if you don't support creation of new rows */ table_set->allow_creation = 1; table_set->rowstatus_column = COLUMN_MYTESTROWSTATUS; /*************************************************** * Adding indexes */ DEBUGMSGTL(("initialize_table_mytestTable", "adding indexes to table mytestTable\n")); netsnmp_table_set_add_indexes(table_set, ASN_INTEGER, /* index: mytestIndex */ 0); DEBUGMSGTL(("initialize_table_mytestTable", "adding column types to table mytestTable\n")); netsnmp_table_set_multi_add_default_row(table_set, COLUMN_MYTESTINDEX, ASN_INTEGER, 0, NULL, 0, COLUMN_MYTESTCOLUMN1, ASN_INTEGER, 1, NULL, 0, COLUMN_MYTESTROWSTATUS, ASN_INTEGER, 1, NULL, 0, 0); /* * registering the table with the master agent */ /* * note: if you don't need a subhandler to deal with any aspects * of the request, change mytestTable_handler to "NULL" */ netsnmp_register_table_data_set(netsnmp_create_handler_registration ("mytestTable", mytestTable_handler, mytestTable_oid, mytestTable_oid_len, HANDLER_CAN_RWRITE), table_set, NULL); }
void init_netflow(void) { netsnmp_handler_registration *reg; struct snmp_vars *sys; /* snmpd -f -L -Dnetflow,dlmod */ DEBUGMSGTL(("netflow", "init_netflow\n")); netsnmp_register_scalar_group( netsnmp_create_handler_registration( "iptNetflowModule", iptNetflowModule_handler, iptNetflowModule_oid, OID_LENGTH(iptNetflowModule_oid), HANDLER_CAN_RONLY), 1, var_max(modinfos)); netsnmp_register_scalar_group( netsnmp_create_handler_registration( "iptNetflowSysctl", iptNetflowSysctl_handler, iptNetflowSysctl_oid, OID_LENGTH(iptNetflowSysctl_oid), HANDLER_CAN_RWRITE), 1, var_max(sysctls)); netsnmp_register_scalar_group( netsnmp_create_handler_registration( "iptNetflowTotals", iptNetflowTotals_handler, iptNetflowTotals_oid, OID_LENGTH(iptNetflowTotals_oid), HANDLER_CAN_RONLY), 1, var_max(totals)); /* Register first table. */ reg = netsnmp_create_handler_registration( "iptNetflowCpuTable", /* no handler */ NULL, iptNetflowCpuTable_oid, OID_LENGTH(iptNetflowCpuTable_oid), HANDLER_CAN_RONLY); /* set up columns */ cpu_data_set = netsnmp_create_table_data_set("iptNetflowCpuDataSet"); netsnmp_table_set_add_indexes(cpu_data_set, ASN_INTEGER, 0); /* I include cpuIndex into columns, which is not SMIv2'ish */ for (sys = cputable; sys->obj; sys++) netsnmp_table_set_add_default_row(cpu_data_set, sys->obj, sys->type, 0, NULL, 0); netsnmp_register_table_data_set(reg, cpu_data_set, NULL); /* cache handler will load actual data, and it needs to be * injected in front of dataset handler to be called first */ stat_cache = netsnmp_cache_create( /* no timeout */ -1, stat_cache_load, dummy_cache_free, iptNetflowCpuTable_oid, OID_LENGTH(iptNetflowCpuTable_oid)); netsnmp_inject_handler(reg, netsnmp_cache_handler_get(stat_cache)); /* Register second table. */ reg = netsnmp_create_handler_registration( "iptNetflowSockTable", /* no handler */ NULL, iptNetflowSockTable_oid, OID_LENGTH(iptNetflowSockTable_oid), HANDLER_CAN_RONLY); /* set up columns */ sock_data_set = netsnmp_create_table_data_set("iptNetflowSockDataSet"); /* I don't include sockIndex into columns, which is more SMIv2'ish */ netsnmp_table_set_add_indexes(sock_data_set, ASN_INTEGER, 0); for (sys = &socktable[1]; sys->obj; sys++) netsnmp_table_set_add_default_row(sock_data_set, sys->obj, sys->type, 0, NULL, 0); netsnmp_register_table_data_set(reg, sock_data_set, NULL); /* as before, cache handler will load actual data, and it needs * to be injected in front of dataset handler to be called first */ stat_cache = netsnmp_cache_create( /* no timeout */ -1, stat_cache_load, dummy_cache_free, iptNetflowSockTable_oid, OID_LENGTH(iptNetflowSockTable_oid)); netsnmp_inject_handler(reg, netsnmp_cache_handler_get(stat_cache)); }