void netsnmp_table_set_multi_add_default_row(netsnmp_table_data_set *tset, ...) { va_list debugargs; unsigned int column; int type, writable; void *data; size_t data_len; va_start(debugargs, tset); while ((column = va_arg(debugargs, unsigned int)) != 0) { type = va_arg(debugargs, int); writable = va_arg(debugargs, int); data = va_arg(debugargs, void *); data_len = va_arg(debugargs, size_t); netsnmp_table_set_add_default_row(tset, column, type, writable, data, data_len); } va_end(debugargs); }
/** @internal */ void netsnmp_config_parse_table_set(const char *token, char *line) { oid name[MAX_OID_LEN], table_name[MAX_OID_LEN]; size_t name_length = MAX_OID_LEN, table_name_length = MAX_OID_LEN; struct tree *tp, *indexnode; netsnmp_table_data_set *table_set; data_set_tables *tables; struct index_list *index; unsigned int mincol = 0xffffff, maxcol = 0; u_char type; char *pos; /* * instatiate a fake table based on MIB information */ DEBUGMSGTL(("9:table_set_add_table", "processing '%s'\n", line)); if (NULL != (pos = strchr(line,' '))) { config_pwarn("ignoring extra tokens on line"); snmp_log(LOG_WARNING," ignoring '%s'\n", pos); *pos = '\0'; } /* * check for duplicate table */ tables = (data_set_tables *) netsnmp_get_list_data(auto_tables, line); if (NULL != tables) { config_pwarn("duplicate table definition"); return; } /* * parse oid and find tree structure */ if (!snmp_parse_oid(line, table_name, &table_name_length)) { config_pwarn ("can't instatiate table since I can't parse the table name"); return; } if(NULL == (tp = get_tree(table_name, table_name_length, get_tree_head()))) { config_pwarn("can't instatiate table since " "I can't find mib information about it"); return; } if (NULL == (tp = tp->child_list) || NULL == tp->child_list) { config_pwarn("can't instatiate table since it doesn't appear to be " "a proper table (no children)"); return; } /* * check for augments indexes */ if (NULL != tp->augments) { if (!snmp_parse_oid(tp->augments, table_name, &table_name_length)) { config_pwarn("I can't parse the augment tabel name"); snmp_log(LOG_WARNING, " can't parse %s\n", tp->augments); return; } if(NULL == (tp = get_tree(table_name, table_name_length, get_tree_head()))) { config_pwarn("can't instatiate table since " "I can't find mib information about augment table"); snmp_log(LOG_WARNING, " table %s not found in tree\n", tp->augments); return; } table_set = netsnmp_create_table_data_set(line); /* * loop through indexes and add types */ for (index = tp->indexes; index; index = index->next) { if (!snmp_parse_oid(index->ilabel, name, &name_length) || (NULL == (indexnode = get_tree(name, name_length, get_tree_head())))) { config_pwarn("can't instatiate table since " "I don't know anything about one index"); snmp_log(LOG_WARNING, " index %s not found in tree\n", index->ilabel); return; /* xxx mem leak */ } type = mib_to_asn_type(indexnode->type); if (type == (u_char) - 1) { config_pwarn("unknown index type"); return; /* xxx mem leak */ } if (index->isimplied) /* if implied, mark it as such */ type |= ASN_PRIVATE; DEBUGMSGTL(("table_set_add_row", "adding default index of type %d\n", type)); netsnmp_table_dataset_add_index(table_set, type); } } else table_set = netsnmp_create_table_data_set(line); /* * loop through indexes and add types */ for (index = tp->indexes; index; index = index->next) { if (!snmp_parse_oid(index->ilabel, name, &name_length) || (NULL == (indexnode = get_tree(name, name_length, get_tree_head())))) { config_pwarn("can't instatiate table since " "I don't know anything about one index"); snmp_log(LOG_WARNING, " index %s not found in tree\n", index->ilabel); return; /* xxx mem leak */ } type = mib_to_asn_type(indexnode->type); if (type == (u_char) - 1) { config_pwarn("unknown index type"); return; /* xxx mem leak */ } if (index->isimplied) /* if implied, mark it as such */ type |= ASN_PRIVATE; DEBUGMSGTL(("table_set_add_row", "adding default index of type %d\n", type)); netsnmp_table_dataset_add_index(table_set, type); } /* * loop through children and add each column info */ for (tp = tp->child_list; tp; tp = tp->next_peer) { int canwrite = 0; type = mib_to_asn_type(tp->type); if (type == (u_char) - 1) { config_pwarn("unknown column type"); return; /* xxx mem leak */ } DEBUGMSGTL(("table_set_add_row", "adding column %s(%d) of type %d (access %d)\n", tp->label, tp->subid, type, tp->access)); switch (tp->access) { case MIB_ACCESS_CREATE: table_set->allow_creation = 1; case MIB_ACCESS_READWRITE: case MIB_ACCESS_WRITEONLY: canwrite = 1; case MIB_ACCESS_READONLY: DEBUGMSGTL(("table_set_add_row", "adding column %d of type %d\n", tp->subid, type)); netsnmp_table_set_add_default_row(table_set, tp->subid, type, canwrite, NULL, 0); mincol = SNMP_MIN(mincol, tp->subid); maxcol = SNMP_MAX(maxcol, tp->subid); break; case MIB_ACCESS_NOACCESS: case MIB_ACCESS_NOTIFY: break; default: config_pwarn("unknown column access type"); break; } } /* * register the table */ netsnmp_register_table_data_set(netsnmp_create_handler_registration (line, NULL, table_name, table_name_length, HANDLER_CAN_RWRITE), table_set, NULL); netsnmp_register_auto_data_table(table_set, NULL); }
/** Initialize the nlmLogTable table by defining it's contents and how it's structured */ void initialize_table_nlmLogTable(void) { static oid nlmLogTable_oid[] = { 1, 3, 6, 1, 2, 1, 92, 1, 3, 1 }; size_t nlmLogTable_oid_len = OID_LENGTH(nlmLogTable_oid); /* * create the table structure itself */ nlmLogTable = netsnmp_create_table_data_set("nlmLogTable"); /*************************************************** * Adding indexes */ /* * declaring the nlmLogIndex index */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding index nlmLogName of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_dataset_add_index(nlmLogTable, ASN_OCTET_STR); DEBUGMSGTL(("initialize_table_nlmLogTable", "adding index nlmLogIndex of type ASN_UNSIGNED to table nlmLogTable\n")); netsnmp_table_dataset_add_index(nlmLogTable, ASN_UNSIGNED); /* * adding column nlmLogTime of type ASN_TIMETICKS and access of * ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogTime (#2) of type ASN_TIMETICKS to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGTIME, ASN_TIMETICKS, 0, NULL, 0); /* * adding column nlmLogDateAndTime of type ASN_OCTET_STR and access of * ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogDateAndTime (#3) of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGDATEANDTIME, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogEngineID of type ASN_OCTET_STR and access of * ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogEngineID (#4) of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGENGINEID, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogEngineTAddress of type ASN_OCTET_STR and access * of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogEngineTAddress (#5) of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGENGINETADDRESS, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogEngineTDomain of type ASN_OBJECT_ID and access * of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogEngineTDomain (#6) of type ASN_OBJECT_ID to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGENGINETDOMAIN, ASN_OBJECT_ID, 0, NULL, 0); /* * adding column nlmLogContextEngineID of type ASN_OCTET_STR and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogContextEngineID (#7) of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGCONTEXTENGINEID, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogContextName of type ASN_OCTET_STR and access of * ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogContextName (#8) of type ASN_OCTET_STR to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGCONTEXTNAME, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogNotificationID of type ASN_OBJECT_ID and access * of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogTable", "adding column nlmLogNotificationID (#9) of type ASN_OBJECT_ID to table nlmLogTable\n")); netsnmp_table_set_add_default_row(nlmLogTable, COLUMN_NLMLOGNOTIFICATIONID, ASN_OBJECT_ID, 0, NULL, 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 nlmLogTable_handler to "NULL" */ netsnmp_register_table_data_set(netsnmp_create_handler_registration ("nlmLogTable", nlmLogTable_handler, nlmLogTable_oid, nlmLogTable_oid_len, HANDLER_CAN_RWRITE), nlmLogTable, NULL); /* * hmm... 5 minutes seems like a reasonable time to check for out * dated notification logs right? */ snmp_alarm_register(300, SA_REPEAT, check_log_size, 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)); }
/** Initialize the nlmLogVariableTable table by defining it's contents and how it's structured */ void initialize_table_nlmLogVariableTable(void) { static oid nlmLogVariableTable_oid[] = { 1, 3, 6, 1, 2, 1, 92, 1, 3, 2 }; size_t nlmLogVariableTable_oid_len = OID_LENGTH(nlmLogVariableTable_oid); netsnmp_table_data_set *table_set; /* * create the table structure itself */ table_set = netsnmp_create_table_data_set("nlmLogVariableTable"); nlmLogVarTable = table_set; nlmLogVarTable->table->store_indexes = 1; /*************************************************** * Adding indexes */ /* * declaring the nlmLogName index */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding index nlmLogName of type ASN_OCTET_STR to table nlmLogVariableTable\n")); netsnmp_table_dataset_add_index(table_set, ASN_OCTET_STR); /* * declaring the nlmLogIndex index */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding index nlmLogIndex of type ASN_UNSIGNED to table nlmLogVariableTable\n")); netsnmp_table_dataset_add_index(table_set, ASN_UNSIGNED); /* * declaring the nlmLogVariableIndex index */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding index nlmLogVariableIndex of type ASN_UNSIGNED to table nlmLogVariableTable\n")); netsnmp_table_dataset_add_index(table_set, ASN_UNSIGNED); /* * adding column nlmLogVariableIndex of type ASN_UNSIGNED and access * of NoAccess */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableIndex (#1) of type ASN_UNSIGNED to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEINDEX, ASN_UNSIGNED, 0, NULL, 0); /* * adding column nlmLogVariableID of type ASN_OBJECT_ID and access of * ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableID (#2) of type ASN_OBJECT_ID to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEID, ASN_OBJECT_ID, 0, NULL, 0); /* * adding column nlmLogVariableValueType of type ASN_INTEGER and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableValueType (#3) of type ASN_INTEGER to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEVALUETYPE, ASN_INTEGER, 0, NULL, 0); /* * adding column nlmLogVariableCounter32Val of type ASN_COUNTER and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableCounter32Val (#4) of type ASN_COUNTER to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLECOUNTER32VAL, ASN_COUNTER, 0, NULL, 0); /* * adding column nlmLogVariableUnsigned32Val of type ASN_UNSIGNED and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableUnsigned32Val (#5) of type ASN_UNSIGNED to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEUNSIGNED32VAL, ASN_UNSIGNED, 0, NULL, 0); /* * adding column nlmLogVariableTimeTicksVal of type ASN_TIMETICKS and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableTimeTicksVal (#6) of type ASN_TIMETICKS to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLETIMETICKSVAL, ASN_TIMETICKS, 0, NULL, 0); /* * adding column nlmLogVariableInteger32Val of type ASN_INTEGER and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableInteger32Val (#7) of type ASN_INTEGER to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEINTEGER32VAL, ASN_INTEGER, 0, NULL, 0); /* * adding column nlmLogVariableOctetStringVal of type ASN_OCTET_STR * and access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableOctetStringVal (#8) of type ASN_OCTET_STR to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEOCTETSTRINGVAL, ASN_OCTET_STR, 0, NULL, 0); /* * adding column nlmLogVariableIpAddressVal of type ASN_IPADDRESS and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableIpAddressVal (#9) of type ASN_IPADDRESS to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEIPADDRESSVAL, ASN_IPADDRESS, 0, NULL, 0); /* * adding column nlmLogVariableOidVal of type ASN_OBJECT_ID and access * of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableOidVal (#10) of type ASN_OBJECT_ID to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEOIDVAL, ASN_OBJECT_ID, 0, NULL, 0); /* * adding column nlmLogVariableCounter64Val of type ASN_COUNTER64 and * access of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableCounter64Val (#11) of type ASN_COUNTER64 to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLECOUNTER64VAL, ASN_COUNTER64, 0, NULL, 0); /* * adding column nlmLogVariableOpaqueVal of type ASN_OPAQUE and access * of ReadOnly */ DEBUGMSGTL(("initialize_table_nlmLogVariableTable", "adding column nlmLogVariableOpaqueVal (#12) of type ASN_OPAQUE to table nlmLogVariableTable\n")); netsnmp_table_set_add_default_row(table_set, COLUMN_NLMLOGVARIABLEOPAQUEVAL, ASN_OPAQUE, 0, NULL, 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 nlmLogVariableTable_handler to "NULL" */ netsnmp_register_table_data_set(netsnmp_create_handler_registration ("nlmLogVariableTable", nlmLogVariableTable_handler, nlmLogVariableTable_oid, nlmLogVariableTable_oid_len, HANDLER_CAN_RWRITE), table_set, NULL); }